2014-06-06 27 views
28

Kann jQuery oder JavaScript mit einer Regex verwendet werden, um mehrere Elemente mit ähnlicher ID auszuwählen?Elemente mit ID-Attribut auswählen, das mit einem bestimmten Wert beginnt/endet

Ich habe die folgenden Absätze:

<p id="item5_2"> A </p> 
<p id="item9_5"> B </p> 
<p id="item14_2"> C </p> 

ich den Inhalt der Absätze mit der ID ab item und endend in 2 ändern möchten.

habe ich die folgende jQuery:

$("#item[\d]*2").html("D"); 

aber es funktioniert nicht. Wie kann ich es zur Arbeit bringen?

JSFiddle Demo

+0

mit ähnlichen ids ?? IDs sollten eindeutig sein. –

+2

@MilindAnantwar ähnlich! = Gleich –

+0

Bin ich der Einzige, der bemerkt hat, dass alle Antworten bisher prüfen, ob die ID mit '2' endet, aber es gibt eine Endung mit' 5'? – nyuszika7h

Antwort

32

Ja, es kann, können Sie die attribute starts with kombinieren und den attribute ends with Selektor

$('[id^="item"][id$="2"]').html("D"); 

FIDDLE(und Sie haben jQuery in der Geige ermöglichen)

Sie nicht regex verwenden können, obwohl die Zahlen übereinstimmen dazwischen, denn das würde Sie filter()

$('[id^="item"]').filter(function() { 
    return this.id.match(/item\d+_2/); 
}).html("D"); 
+2

Das ist eine gute Antwort auf die Frage, aber ich möchte den Elefanten im Raum ansprechen. __Auswahl basierend auf einer partiellen ID-Übereinstimmung __ ist ein __horrible__ Ansatz, der [Separation of Concerns] (http://en.wikipedia.org/wiki/Separation_of_concerns) vollständig ignoriert. Vor allem, wenn Sie stattdessen Arrays verwenden können, um das gleiche Ergebnis zu erhalten. Fügen Sie Geschäftslogik nicht in die Präsentationsebene Ihrer Anwendung ein. Diese Art von Auswahl zu treffen, ist ein häufiger Fehler bei Entwicklern, die ihre ersten Schritte in der UI-Codierung unternehmen, und es wird am besten vermieden. –

15

Sie können "mit Start" und "endet mit" Selektoren von jQuery zur Verfügung gestellt, wie unten.

$("[id^='item'][id$='2']").html("D"); 

Offizielle Dokumentation:

4

Sie können brauchen Attributselektoren kombinieren: fiddle

$("[id^='item'][id$='2']").html("D"); 
4

Versuchen Sie, diese

<p id="item5_2"> A </p> 
<p id="item9_5"> B </p> 
<p id="item14_2"> C </p> 

und ...

$('[id^="item"][id$="2"]') 
9

Der beste Weg zu gehen the following jQuery selectors

^= is starts with 
$= is ends with 

= is exactly equal 
!= is not equal 
*= is contains 

Also in Ihrem Fall zu verwenden:

var $items = $('[id^="item"][id$="2"]'); 
4

ist die JS FIDDLE

von HTML-Code:

<p id="item5_2"> A </p> 
<p id="item9_5"> B </p> 
<p id="item14_2"> C </p> 
<input type="button" value="Get element ids starting with 'item' and ending with '2'" onclick="get_ids()"> 

JS:

get_ids = function(){ 
    $('[id^="item"][id$="2"]').each(function() { 
     alert($(this).attr('id')); 
    }); 
} 
2

Sie nächsten Code verwenden können, wenn Sie eine andere Aktion zu tun:

$('[id^="item"]').each(function(){ 
    if(this.id.slice(-1) == 2){ 
    //Do something 
    $(this).html('D'); 
    } 

}); 
Verwandte Themen