2011-12-30 13 views
10

Dada la siguiente html ...jQuery - contenido igual al lugar de contenidos contiene

<div id="group"> 
    <ul> 
     <li><div class="category">one</div></li> 
     <li><div class="category">one</div></li> 
     <li><div class="category">onetwo</div></li> 
     <li><div class="category">two</div></li> 
    </ul> 
</div> 

... Estoy tratando de averiguar cómo hacer un selector de jQuery que seleccionará todos los elementos que '#group ul li' tener un hijo '.category' con innerHTML igual a una cadena (por ejemplo, "uno"). Por ejemplo, dada la cadena "uno", este selector devolvería los primeros dos li's.

Esto es lo que tengo hasta ahora:

$('#group ul li') seleccionará toda la li. Entonces necesito filtrar:
$('#group ul li').filter(".category:contains('one')") seleccionará todas estas li's de modo que tengan un hijo con categoría de clase que contenga la cadena 'uno'. Sin embargo, ¿hay alguna manera de verificar que esto sea igual a a uno?

Estoy pensando que tal vez solo escriba mi propia función que hace la comprobación de igualdad y la pasa a filtrar?

Respuesta

20
$('#group ul li div.category').filter(function() {return $(this).text() == "one";}).parent() 

Esta es probablemente la forma más específica. Ver example.

+0

¿Su ejemplo no arroja los resultados esperados? –

+1

Querías obtener los primeros dos 'li's y hace exactamente eso. ¿Cuál es tu resultado esperado entonces? –

+0

Podría haber perdido el .parent() al final ... my bad –

4

Puede utilizar la función de filtro con una argumentación funcional. Algo así como:

$('#group ul li').filter(function() { return $(this).html() == 'one'; }) 
+0

Esto está cerca, pero $ (esto) debería ser la comprobación de la categoría hijo, no esta ... –

0

¿funcionaría una declaración if, o está buscando un selector? como declaración, esto podría hacer ...

if ($('#group ul li .category').html() == 'one') 
+0

Estoy buscando un selector, me gustaría seleccionar muchos

  • 's diferentes. –

    3

    Ninguna de las respuestas anteriores es correcta. Terminé usando esto como mi selectora:

    $('#group ul li').filter(function() { 
        return $(this).children('.category').html() == 'one'; 
    }) 
    

    Por favor, hágamelo saber si hay una mejor manera de hacer esto y yo aceptaré con alegría su respuesta.

    +0

    En realidad ... El tuyo es como la respuesta aceptada, excepto que su filtro se está filtrando de manera más específica desde el principio, y el tuyo se está filtrando más específicamente después. Honestamente me gusta el otro mejor. – Metropolis

    +0

    Ver comentario sobre la respuesta aceptada. –

    Cuestiones relacionadas