2011-09-08 10 views
7

Czy istnieje sposób w jQuery do wybierania elementów, które mają określoną wartość w tablicy atrybutów danych?Jak wybrać elementy z jQuery, które mają pewną wartość w tablicy atrybutów danych

Rozważmy następujący fragment HTML:

<li id="person1" data-city="Boston, New York, San Fransisco"> 
    Person name 1 
</li> 
<li id="person2" data-city="Los Angeles, New York, Washington"> 
    Person name 2 
</li> 

Jaki jest najlepszy sposób w jQuery aby wybrać wszystkie osoby z „New York” w danych-city atrybutu?

Roztwór powinien wziąć w uwagę, że niektóre citynames pojawiają się w innych nazw miast (w przykładzie 2: London, New London)

Przykład 2:

<li id="person1" data-city="Boston, London, San Fransisco"> 
    Person name 1 
</li> 
<li id="person2" data-city="Los Angeles, Washington, New London"> 
    Person name 2 
</li> 

Jaki jest najlepszy sposób, w jQuery wybierz wszystkie osoby z "London" w atrybucie data-city? Miasta z "Nowym Londynem" nie należy wybierać.

+0

Nie można mieć wiele elementów o tej samej wartości id. – jfriend00

+0

możliwy duplikat [Jak wybrać elementy z jQuery, które mają pewną wartość w tablicy atrybutów danych] (http://stackoverflow.com/questions/7344353/how-to-select-elements-with-jquery-that-have atrybut -a-pewnej-wartości-w-danych) – Paulpro

+0

skorygował kod HTML, więc wszystkie elementy mają unikalny identyfikator – murze

Odpowiedz

32

Można użyć selektora tag[attr*=string] gdzie *= pasuje ciąg nigdzie wartości znacznika. Mam kolorowe czerwony tekst, tak więc można przetestować ...

$("li[data-city*=New York]").css({color:'red'}); 

Albo poprzez bardziej złożony sposób, aby dopasować potrzeby przykład dwa:

$("li") 
    .filter(function(){ 
      return $(this).attr('data-city').match(/(^|,\s+)London(,|$)/) 
     }) 
    .css({color:'red'}); 

Ta metoda wykorzystuje filtr, aby przejść przez listę wybranych li i dopasować wszystkie elementy z atrybutem data-city że pasuje do wyrażenia regularnego (^|,\s+)London(,|$) co oznacza ...

  • początek lub przecinek (^|,)
  • oraz jeden lub więcej obszarów (\s+)
  • następnie London
  • po przecinku lub na końcu (,|$)

użyłem tego HTML:

<li id="person1" data-city="Boston, New York, San Fransisco, London"> 
    Person name 1 
</li> 
<li id="person2" data-city="Boston, New Jersey, London, San Fransisco"> 
    Person name 2 
</li> 
<li id="person3" data-city="Los Angeles, New York, New London, Washington"> 
    Person name 3 
</li> 
+0

pszawsze powinieneś używać unikalnego pola id, jeśli chcesz czegoś, a nie konkretnej rzeczy, powinieneś użyć klasy zamiast –

+0

dzięki za rozwiązanie, ale to nie rozwiązuje problemu z przykładu 2 (dodałem kolejny przykład do pytanie) – murze

+1

zobacz zaktualizowaną odpowiedź z rozwiązaniem za pomocą filtra, i wyreperować –

Powiązane problemy