Wenn ich eine unbekannte Anzahl von Bezeichnern habe, die ein bestimmtes Namensschema teilen, gibt es eine Möglichkeit, sie alle mit jQuery auf einmal abzurufen?
// These are the IDs I'd like to select
#instance1
#instance2
#instance3
#instance4
// What do I need to add or how do I need to modify this jQuery selector in order to select all the IDs above?
("#instanceWILDCARD").click(function(){}
jquery
jquery-selectors
wildcard
Matt Elhotiby
quelle
quelle
Antworten:
Das Attribut begin-with selector (
'^=
) funktioniert für Ihre IDs wie folgt:$("[id^=instance]").click(function() { //do stuff });
Erwägen Sie jedoch, Ihren Elementen beispielsweise eine gemeinsame Klasse zu geben (ich mache mich kaputt)
.instance
, und verwenden Sie diesen Selektor:$(".instance").click(function() { //do stuff });
quelle
Wenn Sie wirklich mit Klassen und nicht mit IDs übereinstimmen möchten, ist die Syntax etwas komplizierter, da die Klasse mehrere Werte haben kann.
// handle elements like <div class="someclass1"></div> $('[class^="someclass"]').click(function() { // do stuff }); // handle elements like <div class="foo someclass1"></div> $('[class*=" someclass"]').click(function() { // do stuff });
quelle
Ich bin überrascht, dass niemand erwähnt hat, dass Sie einen eigenen Filter-Selektor erstellen (indem Sie die Selector-Funktionalität von jQuery erweitern). Hier habe ich einen Platzhalter-Selektor erstellt, den ich "likeClass" und "likeId" genannt habe. Er akzeptiert alle Platzhalter-Zeichenfolgen und findet alle Elemente, die übereinstimmen (ähnlich wie bei Regex-Übereinstimmungen).
Code:
$.expr[':'].likeClass = function(match){ return $('[class*=" '+ match +'"]'); }; $.expr[':'].likeId = function(match){ return $('[id*=" '+ match +'"]'); };
Anwendungsbeispiel:
Angenommen, Sie hatten mehrere div-Elemente mit ähnlichen Namen wie .content-1, .content-2, .content-n ... usw. und möchten diese auswählen. Jetzt ist es Kuchen!
oder
Oh ja, noch etwas ... du kannst es auch verketten. :) :)
$('li:likeId(slider-content-)').hide().addClass('sliderBlock').first().fadeIn('fast');
Genießen!
quelle
$('ul:likeClass(menu_)').addClass('found_menu');
die zum Testen gut funktionieren. Haben Sie eine Idee, wie Sie den 'Platzhalter'-Teil des Klassennamens wie' left 'oder' right 'extrahieren können, falls die Klassennamen' menu_left 'und' menu_right 'sind?Wenn Sie jQuery haben, brauchen Sie keinen zusätzlichen Ausdruck oder etwas Besonderes
jQuery('[class*="someclass"]').click(function(){ }); jQuery('[id*="someclass"]').click(function(){ });
Wie bereits erwähnt: https://stackoverflow.com/a/2220874/2845401
quelle
Warum ordnen Sie nicht einfach
class = "instance"
allen zu und wählen sie mit aus$('.instance')
?quelle
Das sind IDs, aber Sie können etwas Ähnliches tun wie:
$("[id^='instance']").click(...)
Das ist allerdings etwas teuer - es hilft, wenn Sie entweder a) den Elementtyp oder b) eine allgemeine Position im DOM angeben können, wie z.
$("#someContentDiv span[id^='instance']").click(...)
Der
[id^='...']
Selektor bedeutet im Grunde "finde ein Element, dessen ID mit dieser Zeichenfolge beginnt, ähnlich wieid$=
(ID endet mit dieser Zeichenfolge) usw.Eine umfassende Liste finden Sie auf der Seite jQuery Docs hier .
quelle
Verwenden Sie die Karotte.
$("div[id^=instance]").hide();
jsFiddle Beispiel
quelle
Wir können es so machen:
$(document).ready(function () { $('[id*=btnOk]').live("click", function () { }); });
quelle
live
ist veraltet. Verwenden Sieon
.Dies ist die einzig richtige Antwort auf die ID-Platzhalterfrage.
$('[id*="Wild card in double quotes"]')
Dies wird "Wild Card in doppelten Anführungszeichen. Und es gibt mehr !!!" und auch "Mehr BS vor Wild. Wild Card in doppelten Anführungszeichen" erhalten.
Sie sollten Anführungszeichen verwenden, die sich von Ihren '[]' Tags unterscheiden.
quelle