2011-01-12 12 views
8

Gibt es eine Möglichkeit - jede jQuery-Selektor (ich habe keine auf http://api.jquery.com/category/selectors/ gefunden), die als genaues Match verwendet werden kann?jQuery Selector - Match Inhalt von Elementen

:contains() ist fast das, was ich brauche, aber nicht genau. ": enthält" sucht in jedem Element wie diese regex:

.*<query>.* 

Was bedeutet, wenn ich Link finden müssen, die genau so aussieht:

<a href="#">Baxter</a> 

Und verwenden Sie diese:

$("a:contains('Baxter')") 

Sie paßt auch das, was ich nicht übereinstimmen soll:

<a href="#">I'm Peter Baxter, how are you?</a> 

Ich weiß, dass ich einfach alle Elemente nehmen und ihren Inhalt im Zyklus vergleichen kann, aber ich will sicher sein, es gibt keinen einfacheren Weg.

Antwort

12

Nein, aber es wäre trivial als Plugin hinzuzufügen:

$.expr[':'].contentIs = function(el, idx, meta) { 
    return $(el).text() === meta[3]; 
}; 

Sie können diese dann verwenden, wie $('a:contentIs("Baxter")')

+0

das ist eine wirklich schöne, kleine Erweiterung. Ich frage mich, warum das nicht im Kern ist –

+1

@P.scheit Es ist ziemlich teuer, rechnerisch ... Obwohl, zurückblickend, könnte es verbessert werden mit '$ .text ([el])' anstatt $ (el). text() '. – lonesomeday