Muy bien, me pregunto si hay una manera de hacer que el :contains()
selector de jQuery seleccione elementos con solo la cadena que se escribe
por ejemplo -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
El selector seleccionará ambos p
elementos y los pondrá en negrita, pero quiero que seleccione solo el primero.
jquery
jquery-selectors
Julian
fuente
fuente
:contains
selector con tu propio código, pero ¿no supongo que eso es lo que querías decir?Respuestas:
No, no hay un selector jQuery (o CSS) que haga eso.
Puedes usar fácilmente
filter
:No es un selector , pero hace el trabajo. :-)
Si desea manejar espacios en blanco antes o después del "hola", puede agregar un mensaje
$.trim
allí:Para los optimizadores prematuras por ahí, si no te importa que no coincide
<p><span>hello</span></p>
y similares, puede evitar las llamadas a$
ytext
utilizandoinnerHTML
directamente:... pero tendrías que tener muchos párrafos para que importen, tantos que probablemente tengas otros problemas primero. :-)
fuente
$.trim
de cualquier espacio en blanco perdido antes de hacer la comparación.==
(== 2
) o poner el número en una cadena (=== "2"
), porque el valor que obtienestext()
oinnerHTML
siempre es una cadena. Si estaba comparando con una cadena, no importa si usa==
o===
.:contains
que es bastante más complejo, pero no ha implementado un selector para la coincidencia exacta del texto. = {Intente agregar una pseudo función extendida:
Entonces puedes hacer:
fuente
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Puede usar la función filter () de jQuery para lograr esto.
fuente
Entonces, la respuesta de Amandu funciona principalmente. Sin embargo, al usarlo en la naturaleza, me encontré con algunos problemas, donde las cosas que hubiera esperado encontrar no se encontraban. Esto se debió a que a veces hay espacios en blanco al azar que rodean el texto del elemento. Creo que si está buscando "Hello World", todavía querrá que coincida con "Hello World", o incluso "Hello World \ n". Por lo tanto, acabo de agregar el método "trim ()" a la función, que elimina los espacios en blanco circundantes, y comenzó a funcionar mejor.
Específicamente...
Además, tenga en cuenta que esta respuesta es extremadamente similar a Seleccionar enlace por texto (coincidencia exacta)
Y la nota secundaria ...
trim
solo elimina los espacios en blanco antes y después del texto buscado. No elimina los espacios en blanco en el medio de las palabras. Creo que este es un comportamiento deseable, pero podría cambiarlo si lo desea.fuente
Encontré una forma que funciona para mí. No es 100% exacto, pero elimina todas las cadenas que contienen más que solo la palabra que estoy buscando porque verifico que la cadena no contenga espacios individuales también. Por cierto, no necesitas estos "". jQuery sabe que estás buscando una cadena. Asegúrese de tener solo un espacio en la parte: contiene (), de lo contrario no funcionará.
Y sí, sé que no funcionará si tienes cosas como
<p>helloworld</p>
fuente
Como TJ Crowder dijo anteriormente, la función de filtro hace maravillas. No estaba funcionando para mí en mi caso específico. Necesitaba buscar múltiples tablas y sus respectivas etiquetas td dentro de un div (en este caso, un diálogo jQuery).
¡Espero que esto sea útil para alguien!
fuente
Una línea que funciona con bibliotecas alternativas a jQuery:
Y este es el equivalente a un
a:contains("pattern")
selector de jQuery :fuente
El .first () ayudará aquí
fuente