2009-09-16 28 views
24

Necesito seleccionar un elemento basado en su texto en jQuery.jQuery seleccionar según el texto

Por ejemplo:

<span>this text</span> 

Sé que puedo utilizar .contains() para seleccionar en función del texto, pero no es exclusivo.

no quiero para seleccionar:

<span>this text and that text</span> 

deseo seleccionar el elemento si es el único texto del elemento.

Además del uso de expresiones regulares, ¿cómo hago esto con los selectores jQuery?

Gracias.

Respuesta

34

Tiene algo de influencia con: contiene selector, pero eso solo va tan lejos. Usted tendrá que recortar más abajo en el conjunto de elementos sobre la base de coincidencias de texto exactas, como en:

$("span:contains(this text)") 
.filter 
(
    function() 
    { 
    return $(this).text() === "this text"; 
    } 
) 

Esto hace que el inicial contiene el uso técnicamente innecesario, pero puede experimentar beneficios de rendimiento, comenzando con una colección más pequeña de elementos SPAN antes de filtrar hasta el conjunto exacto que están interesados ​​en

EDITAR:. Tomó la sugerencia de Ken Browning utilizar la función en lugar de innerHTMLtext() para la comparación de cadenas dentro de la función filter. La idea es que innerHTML capturará texto que no nos interesa especialmente (incluido el marcado).

+4

Buena respuesta, pero ¿por qué usar 'innerHTML' en lugar de' $ (this) .text() '? No usaría 'innerHTML' para que él contabilice los casos en que los criterios incluyan caracteres que deben codificarse (como & -> &) –

+0

¡Para curiosear, le di +1 y una referencia en la respuesta! –

+0

@DavidAndres En lugar de 'innerHTML' también puede usar' innerText' que es más rápido que '.text()' y no incluiría el marcado. – hitautodestruct

Cuestiones relacionadas