2009-09-03 13 views
7

Dado el HTML a continuación, estoy tratando de usar jQuery para que coincida con todos los elementos de lista que tienen un lapso con la clase "foo" y que span debe contener el texto "relevante".jQuery: tiene (.something: contains()) unsupported?

<ul> 
    <li>Some text <span class="foo">relevant</span></li> 
    <li>Some more text <span class="foo">not</span> <span class="bar">relevant</span></li> 
    <li>Even more <span class="foo">not so either</span></li> 
    <li>Blablabla <span class="foo">relevant</span> <span class="bar">blabla</span></li> 
    <li>No foo here <span class="bar">relevant</span></li> 
</ul> 

Tenga en cuenta que también hay unos cuantos lapso de la "barra" de clase, y que también tiene el texto "relevante", que no debe ser incluido.

Mis intentos de un selector:

ul li:has(.foo:contains('relevant")) 

esto no funciona. El siguiente ejemplo selecciona algo, pero no tiene en cuenta que existen múltiples lapso de dentro de la lista:

ul li:has(span:contains('relevant")) 

Here is a live example that you can play with. En una versión de trabajo, solo deben seleccionarse los elementos primero y cuarto de esa lista.

+2

+1 para usar jsbin en la pregunta, ahorrándonos todo el tiempo de trabajo. – Kobi

+2

@Kobi - +1 para admitir que SO en el trabajo :) – karim79

Respuesta

6

mira esto:

$(document).ready(function(){ 
    $('span.foo:contains(relevant)').parents('li').each(function() { 
     alert($(this).text()); 
    }); 
}); 
+0

Que selecciona el span.foo, no el elemento de la lista. –

+0

@Vegard Larsen: disculpa por eso, editado. – karim79

1

sé que esto puede no ser tan elegante, pero al menos se va a trabajar:

$("ul li .foo:contains('relevant')").parent("li"); 

no pude obtener su versión de trabajar bien. ..

2

traté de invertir el orden de los selectores:

$("ul li:has(:contains('relevant').foo)").css('background-color', 'red'); 

Esto parece funcionar bien, no se puede decir por qué sin embargo: http://jsbin.com/asoma

4

golpeada hasta que ... Pero si quieres un selector pura que eran rematadamente cerca

ul li:has(span[class='foo']:contains('relevant')) 
0

No estoy seguro de por qué estás teniendo ese problema con el selector, confirmó que esto sí funciona:

$("ul li").filter(":has(span.foo:contains('relevant'))").css('background-color', 'green'); 
Cuestiones relacionadas