Gut, ich frage mich, ob es eine Möglichkeit gibt, den :contains()
Selektor von jQuery so zu gestalten, dass Elemente nur mit der eingegebenen Zeichenfolge ausgewählt werden
zum Beispiel -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
Der Selektor wählt beide p
Elemente aus und macht sie fett, aber ich möchte, dass nur das erste ausgewählt wird.
jquery
jquery-selectors
julianisch
quelle
quelle
:contains
Selektor mit Ihrem eigenen Code überschreiben , aber ich nehme nicht an, dass Sie das gemeint haben?Antworten:
Nein, es gibt keinen jQuery- (oder CSS-) Selektor, der das macht.
Sie können leicht verwenden
filter
:Es ist kein Selektor , aber es macht den Job. :-)
Wenn Sie vor oder nach dem "Hallo" mit Leerzeichen umgehen möchten, können Sie ein
$.trim
:Für die vorzeitigen Optimierer da draußen können Sie
<p><span>hello</span></p>
die Aufrufe an$
undtext
durchinnerHTML
direkte Verwendung vermeiden , wenn Sie sich nicht darum kümmern, dass es nicht übereinstimmt und ähnlich ist :... aber Sie müssten viele Absätze haben, damit es wichtig ist, so viele, dass Sie wahrscheinlich zuerst andere Probleme haben würden. :-)
quelle
$.trim
es auch von streunenden Leerzeichen, bevor Sie den Vergleich durchführen.==
(== 2
) oder die Zahl in einem String (Put=== "2"
), weil der Wert , den Sie von zu bekommentext()
oderinnerHTML
immer eine Zeichenfolge ist. Wenn Sie mit einer Zeichenfolge verglichen haben, spielt es keine Rolle, ob Sie==
oder verwenden===
.:contains
etwas komplexer implementiert hat, aber keinen Selektor für die genaue Textübereinstimmung implementiert hat. = {Versuchen Sie, eine erweiterte Pseudofunktion hinzuzufügen:
Dann können Sie tun:
quelle
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Sie können dazu die filter () -Funktion von jQuery verwenden .
quelle
Amandus Antwort funktioniert also meistens. Bei der Verwendung in freier Wildbahn stieß ich jedoch auf einige Probleme, bei denen Dinge, von denen ich erwartet hätte, dass sie gefunden werden, nicht gefunden wurden. Dies lag daran, dass der Text des Elements manchmal von einem zufälligen Leerraum umgeben ist. Ich glaube, wenn Sie nach "Hello World" suchen, möchten Sie immer noch, dass es mit "Hello World" oder sogar "Hello World \ n" übereinstimmt. Daher habe ich der Funktion gerade die Methode "trim ()" hinzugefügt, mit der umgebende Leerzeichen entfernt werden, und sie begann besser zu funktionieren.
Speziell...
Beachten Sie auch, dass diese Antwort der Option Link nach Text auswählen sehr genau entspricht (genaue Übereinstimmung).
Und sekundäre Anmerkung ...
trim
entfernt nur Leerzeichen vor und nach dem gesuchten Text. Leerzeichen in der Mitte der Wörter werden nicht entfernt. Ich glaube, das ist wünschenswertes Verhalten, aber Sie können das ändern, wenn Sie wollen.quelle
Ich habe einen Weg gefunden, der für mich funktioniert. Es ist nicht 100% genau, aber es werden alle Zeichenfolgen entfernt, die mehr als nur das gesuchte Wort enthalten, da ich prüfe, ob die Zeichenfolge auch keine einzelnen Leerzeichen enthält. Diese "" brauchen Sie übrigens nicht. jQuery weiß, dass Sie nach einer Zeichenfolge suchen. Stellen Sie sicher, dass Sie nur ein Leerzeichen im Teil: enthält () haben, da dies sonst nicht funktioniert.
Und ja, ich weiß, es wird nicht funktionieren, wenn Sie solche Sachen haben
<p>helloworld</p>
quelle
Wie oben bei TJ Crowder erwähnt, wirkt die Filterfunktion Wunder. In meinem speziellen Fall hat es bei mir nicht funktioniert. Ich musste mehrere Tabellen und ihre jeweiligen td-Tags in einem div durchsuchen (in diesem Fall einen jQuery-Dialog).
Ich hoffe das ist hilfreich für jemanden!
quelle
Ein Einzeiler, der mit alternativen Bibliotheken zu jQuery arbeitet:
Und dies entspricht dem
a:contains("pattern")
Selektor eines jQuery :quelle
Die .first () hilft hier
quelle