2014-06-06 9 views
28

Czy można użyć jQuery lub JavaScript z wyrażeniem regularnym, aby wybrać wiele elementów o podobnym id?Wybierz elementy z atrybutem id, który zaczyna/kończy się określoną wartością

Mam następujące paragrafy:

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

Chcę zmienić treść ustępów z id począwszy item a kończąc w 2.

użyłem następujące jQuery:

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

ale to nie działa. Jak mogę go uruchomić?

JSFiddle Demo

+0

z podobnymi id ?? Identyfikatory powinny być unikalne. –

+2

@MilindAnantwar podobne! = Same –

+0

Czy jestem jedynym, który zauważył, że wszystkie odpowiedzi do tej pory sprawdzają, czy ID kończy się na '2', ale jest jeden kończący się na' 5'? – nyuszika7h

Odpowiedz

32

Tak to może można połączyć attribute starts with oraz selektora attribute ends with

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

FIDDLE(i trzeba włączyć jQuery na skrzypcach)

nie można użyć wyrażenia regularnego, aby dopasować numery między jednak na to, że trzeba filter()

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

To jest dobra odpowiedź na to pytanie, ale chciałbym zwrócić się do słonia w pokoju. __selecting na podstawie częściowego id match__ jest podejściem __horrible__, które zupełnie lekceważy [Separation of Concerns] (http://en.wikipedia.org/wiki/Separation_of_concerns). Zwłaszcza, gdy można użyć tablic zamiast tego, aby uzyskać ten sam wynik. Nie umieszczaj logiki biznesowej w warstwie prezentacji swojej aplikacji. Wykonywanie tego rodzaju wyborów jest częstym błędem w programach, które stawiają pierwsze kroki w kodowaniu UI i najlepiej go unikać. –

4

Ty możliwe, połączyć selektorów atrybutów: fiddle

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

Spróbuj

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

i ...

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

Najlepszym sposobem jest użycie the following jQuery selectors

^= is starts with 
$= is ends with 

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

Więc w twoim przypadku:

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

Oto pracuje JS FIDDLE

HTML:

<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

Można użyć kolejnego kodu, jeśli chcesz robić żadnych innych działań:

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

}); 
Powiązane problemy