67 votes

Comment sélectionner toutes les balises d'ancrage avec un texte spécifique ?

Étant donné plusieurs balises d'ancrage :

<a class="myclass" href="...">My Text</a>

Comment sélectionner les ancres correspondant à la classe et avec un texte spécifique. Par exemple, sélectionner toutes les ancres avec la classe : 'myclass' et le texte : 'My Text'.

122voto

David Morton Points 10519
$("a.myclass:contains('My Text')")

13voto

Andy E Points 132925

Vous pouvez créer un sélecteur personnalisé similaire à :contains pour les correspondances exactes :

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

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

4voto

karim79 Points 178055

Si le texte de l'ancre ne vous dérange pas contient une chaîne particulière, optez pour la solution de @Dave Morton. Si, toutefois, vous voulez exactement correspondre à une chaîne particulière, je suggérerais quelque chose comme ceci :

$.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>

Version légèrement améliorée (avec une deuxième garniture paramètre) :

$.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>

3voto

Monika Points 31

Tout d'abord, sélectionnez toutes les balises contenant "MON texte". Ensuite, pour chaque correspondance exacte, si elle correspond à la condition, faites ce que vous voulez.

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

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

0voto

Muli Points 200

Si vous ne connaissez pas la classe de l'objet désiré et que vous souhaitez simplement rechercher le texte du lien, il est possible d'utiliser la méthode suivante

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

Si vous ne savez même pas de quel élément il s'agit (par exemple a, p, lien, ...) vous pouvez utiliser

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

(en laissant juste la partie avant : blanc.)

Je dois ajouter ici qu'il fait apparaître tous les éléments à partir de <html> -Descendez jusqu'à l'élément souhaité. Une solution que je pourrais proposer consiste à ajouter .last() mais celle-ci ne fonctionne que s'il n'y a qu'un seul élément à trouver. Peut-être que sbdy. connaît une meilleure solution ici.

En fait, cela devrait être un ajout à la réponse acceptée, en particulier à la question de @Amalgovinus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X