2009-09-16 13 views
24

Ich muss ein Element basierend auf seinem Text in jQuery auswählen.jQuery wählen basierend auf Text

Zum Beispiel:

<span>this text</span> 

Ich weiß, ich .contains verwenden kann(), basierend auf Text zu markieren, aber es ist nicht exklusiv.

Ich will nicht wählen:

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

ich das Element auswählen möchte, wenn es der einzige Text des Elements ist.

Abgesehen von Regex, wie mache ich das mit jQuery Selektoren?

Danke.

Antwort

34

Sie haben eine Hebelwirkung mit dem: enthält Selektor, aber das geht nur so weit. Sie müssen, um die Menge von Elementen Verschlankung basierend auf genauen Text Streichhölzer, wie in:

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

Dies macht die ursprüngliche Nutzung technisch unnötig enthält, aber Sie können durch anfangen Leistungsvorteile erleben mit einer kleineren Sammlung SPAN-Elemente, bevor Sie interessiert sind, um die genaue Satz Filterung nach unten

EDIT. Nahm Vorschlag Ken Browning die text() Funktion zu verwenden, anstatt innerHTML für String-Vergleich in der filter Funktion. Die Idee ist, dass innerHTML Text erfasst, an dem wir nicht besonders interessiert sind (einschließlich Markup).

+4

Gute Antwort, aber warum 'innerHTML' anstelle von' $ (this) .text() 'verwenden? Wenn man "innerHTML" nicht verwenden möchte, muss er Fälle berücksichtigen, in denen die Kriterien Zeichen enthalten, die codiert werden müssen (wie & -> &) –

+0

Für das Nitpicking gab ich Ihnen +1 und eine Empfehlung in der Antwort! –

+0

@DavidAndres Statt 'innerHTML' könnten Sie auch' innerText' verwenden, das schneller als '.text()' ist und kein Markup enthält. – hitautodestruct

Verwandte Themen