// NEW selector
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
// OVERWRITES old selecor
jQuery.expr[':'].contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
Update für jQuery 1.8
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
Mit diesem in Kraft,
$("div:contains('John')")
würden alle drei dieser Elemente ausgewählt werden
<div>john</div>
<div>John</div>
<div>hey hey JOHN hey hey</div>
Demo von Pablo Fortes.
Vor einiger Zeit habe ich diesen Snippet irgendwo im Netz gefunden
$.extend($.expr[":"], {
"containsNC": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
Ich mag es besser, weil mit diesem Code der :contains-Selektor selbst bleibt und man einen neuen :containsNC-Selektor hat, der case-insensitiv ist.
$("div:containsNC('John')")
Sehr hilfreich und gerade JETZT von mir gebraucht! Meine Frage ist, WO muss ich den ersten Teil einfügen
$.extend($.expr[":"], {
"containsNC": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
Würde das in die document ready Funktion kommen? Wäre es eine separate JS-Datei?
Ich möchte es in der folgenden Funktion verwenden, die sich in einem "(function(){" Code-Block befindet
$(document).on('keyup', '.rowFilter', function(e){var table = $(this).parent().next('table').attr('id');
var rows = $( '#'+table+' tbody').find('tr').hide();
var data = this.value.split(" ");
$.each(data, function(i, v){
rows.filter(":containsNC('"+v+"')").show();
});
});
+1 für benutzerdefinierten Selektor. Es ist keine gute Idee, das Kernverhalten zu überschreiben (was, wenn jemand bereits auf Case-Sensitivität im selben Projekt angewiesen ist). Ich habe den Namen „icontains“ aus dem Kommentar unten gewählt.
Danke! Das war wirklich nützlich und hat wie am Schnürchen funktioniert (Y)
Das ist solide und definitiv nützlich, aber ich kann dem Überschreiben des Verhaltens einer Kernkomponente von jQuery nicht zustimmen. Es ist viel besser, einen neuen Selektor namens „:icontains“ oder ähnlich zu erstellen und diesen zu verwenden.
Abgesehen davon, danke! Hat mir etwas Zeit gespart.
Sehr nützlich. Ich stimme den anderen Leuten zu, dass es ein neuer Pseudo-Selektor sein sollte.
Danke für den Beitrag, er hat mir sehr geholfen, vielen Dank nochmals
Schönes Stück Code. Einfach durch Kopieren und Einfügen ausgeführt
Großartig! Sehr hilfreich für mich :) Danke
Sehr schön, danke!
Ich konnte den Code nicht verstehen :(((
was ist „jQuery.expr[‘:’]“? Ich kann nichts darüber finden.
Wie lernt man, dies zu benutzen?
$.expr[“:”].contains
?
Erstaunlicher Trick! Danke!
Sehr nützlich. Danke!
Ich mochte Emanuele's Lösung sehr, weil ich sie manchmal case-sensitiv brauche. Beide sind aber sehr nützlich und beide sollten Standard-jQuery-Funktionalität sein.
Hallo Jonathan Gravois: Ich weiß, es ist ziemlich spät und Ihre Frage wurde vielleicht inzwischen beantwortet. Aber ich dachte, es wäre für andere hilfreich.
$(document).on(‘keyup’, ‘.rowFilter’, function(e){
var table = $(this).parent().next(‘table’).attr(‘id’);
var rows = $( ‘#’+table+’ tbody’).find(‘tr’).hide();
var data = this.value.split(” “);
$.extend($.expr[“:”], { “containsNC”: function(elem, i, match, array) { return (elem.textContent || elem.innerText || “”).toLowerCase().indexOf((match[3] || “”).toLowerCase()) >= 0;
}
});
var oObj = $( “:containsNC(‘”+v+”‘)” );
$.each(data, function(i, v){
rows.filter(‘”+oObj+”‘).show();
});
});
Einfach und es funktioniert perfekt.
Ich liebe es! Danke
Hier ist meine Methode, sie sollte ziemlich selbsterklärend sein.
Wir suchen alle „p“-Elemente, die eine beliebige Groß-/Kleinschreibungsvariante von „baskey“ enthalten.
var str =$(“p”).text();
var fnd = str.match(/baskey/gi);
fnd.forEach(function(a){
$(“p:contains(“+a+”)”).css({color:”red”});
});
:)baskey
Hat mir viel Zeit gespart. Danke!
Danke für diesen Snippet! Das sollte bereits in die Kernbibliothek aufgenommen werden.
Für brasilianische Benutzer, case-insensitiv mit Ersatz von Akzenten
Para brasileiros, case insensite substituindo acentos por sem acentos
Abraços
}
ecowebdesign . com . br
Toller Beitrag.
Gibt es eine Möglichkeit, es in Node.js Cheerio zu verwenden?
Ich erhalte den Fehler TypeError: Cannot read property ':" of undefined