2010-03-15 9 views

Respuesta

104
$("a.myclass:contains('My Text')") 
+0

Gracias David. ¿Cómo hago una comparación de coincidencia exacta en lugar de contener? Solo quiero elementos que coincidan exactamente. –

+0

Solo agregaría distinción entre enlaces y marcadores: '$ ('a.myclass [href]: contains (" Mi texto ")')' –

+1

@geoff: No hay una forma incorporada de obtener una coincidencia exacta. Puede usar la función .each para recorrer todas ellas, o puede escribir su propio selector jQuery. Eric Martin ha escrito una buena para la coincidencia exacta. Puede encontrarlo aquí: http://www.ericmmartin.com/creating-a-custom-jquery-selector/ –

4

Si sólo molesta si el texto del ancla contiene una cadena en particular, ir con la solución de @Dave Morton. Sin embargo, si desea exactamente coinciden con una cadena en particular, sugeriría algo como esto:

$.fn.textEquals = function(txt) { 
    return $(this).text() == txt; 
} 

$(document).ready(function() { 
    console.log($("a").textEquals("Hello")); 
    console.log($("a").textEquals("Hefllo")) 
}); 

<a href="blah">Hello</a> 

versión ligeramente mejorada (con un segundo recortar parámetro):

$.fn.textEquals = function(txt,trim) { 
    var text = (trim) ? $.trim($(this).text()) : $(this).text(); 
    return text == txt; 
} 

$(document).ready(function() { 
    console.log($("a.myclass").textEquals("Hello")); // true 
    console.log($("a.anotherClass").textEquals("Foo", true)); // true 
    console.log($("a.anotherClass").textEquals("Foo")); // false 
}); 

<a class="myclass" href="blah">Hello</a> 
<a class="anotherClass" href="blah"> Foo</a> 
12

Usted podría crear un selector personalizado similar a :contains para las coincidencias exactas:

$.expr[':'].containsexactly = function(obj, index, meta, stack) 
{ 
    return $(obj).text() === meta[3]; 
}; 

var myAs = $("a.myclass:containsexactly('My Text')"); 
-2

Creo que esto debería funcionar para la cosa de coincidencia exacta ..

$("a.myclass").html() == "your text" 
+0

No funciona.'html()' solo se aplica al primer elemento en el conjunto de elementos coincidentes (http://api.jquery.com/html/). Necesita flujo de control o iteración para pasar por cada uno de los anclajes, como 'each()'. – dyoo

3

En primer lugar, seleccione todas las etiquetas que contengan 'Mi texto'. Luego, para cada coincidencia exacta, si coincide con la condición, haga lo que quiera hacer.

$(document).ready(function() { 
    $("a:contains('My Text')").each(function() { 
     $store = $(this).text(); 

     if ($store == 'My Text') { 
      //do Anything..... 
     } 
    }); 
}); 
+0

una buena respuesta necesita alguna explicación. – Dinistro

+0

Primero seleccione todas las etiquetas que contengan 'MI texto' y luego para la coincidencia exacta póngalo en condición if. luego haz lo que quieras hacer. – Monika

+0

agregar esto a tu respuesta – Dinistro

0

Si usted no sabe la clase del objeto deseado y sólo quiere ir después de que el texto del enlace es posible utilizar

$(".myClass:contains('My Text')") 

Si aún no sabe qué elemento es (por ejemplo, a, P, enlace, ...) se puede utilizar

$(":contains('My Text')") 

(acaba de salir de la pieza antes de : en blanco).

Tengo que agregar aquí que se muestran todos los elementos que comienzan en <html>: bajar al elemento deseado. Una solución que podría proporcionar es agregarle .last(), pero esta solo funciona si solo hay un elemento para encontrar. Quizás sbdy. conoce una mejor solución aquí.

En realidad, esto debería ser una adición a la respuesta aceptada, especialmente a la pregunta @Amalgovinus.

Cuestiones relacionadas