Gracias por mirar, todas las respuestas útiles son votadas. Este es mi marcado. Estoy tratando de encontrar 2 divisiones consecutivas cmk1 and cmk2 con el contenido RIGHT y HERE en orden consecutivo.

  • div id 1 no debería coincidir porque hay un right pero no here.
  • div id 3 no debería coincidir porque hay un here pero no right.
  • Estoy tratando de encontrar algo que se parezca a div id 2 donde right es seguido por here. Además, el texto debe ser exacto: <div>more than right</div> no debe coincidir aunque contenga la palabra right

¿Cuál es la forma más eficiente de hacer esto?

Actualización: Solo tuve una idea, pude encontrar each class=cmk1. si coincide con DERECHA, podría seleccionar su next (cmk2) y si coincide también, eso es lo que estoy buscando. Pero, ¿cómo hago este bucle while en jquery? y lo más importante, ¿cómo salgo de él?

<div class="sep" id="1">
  <div class="cmk1">right</div>
  <div class="cmk2">valc</div>
  <div class="opp">vald</div>   
  <a class="go">Go</a>                  
</div>
<div class="clear">
<div class="sep" id="12">
  <div class="cmk1">RIGHT</div>
  <div class="cmk2">HERE</div>
  <div class="opp">vala</div>   
  <a class="go">Go</a>                  
</div>
<div class="clear">
<div class="sep" id="59">
  <div class="cmk1">vale</div>
  <div class="cmk2">valf</div>
  <div class="opp">here</div>   
  <a class="go">Go</a>                  
</div>
<div class="clear">
1
Chris 16 oct. 2009 a las 22:22

3 respuestas

La mejor respuesta
$('div.sep > div').each(function() {
    if($(this).text() == 'RIGHT') {
        if($(this).next('div').text() == 'HERE') {
            alert('Values occur consecutively in div id: ' +  $(this).parent().attr('id'));
            return false;            
        }
    }
});

Básicamente he recorrido todos los divs secundarios de cada div .sep y probé la primera palabra. Si coincide, next se puede usar para determinar si el siguiente div contiene La segunda palabra.

3
karim79 16 oct. 2009 a las 19:05

Tratar:

$(':contains(right), :contains(here)')
    .filter( function() {
        return ( $(this).text() == 'right' && $(this).next().is(':contains(here)') ) ||
            ( $(this).text() == 'here' && $(this).prev().is(':contains(right)') );
    } );

El único inconveniente es que distingue entre mayúsculas y minúsculas.

1
Tinister 16 oct. 2009 a las 18:42
$(':contains(RIGHT) :contains(HERE)')
1
powtac 16 oct. 2009 a las 18:27