2010-12-28 15 views
18
<div class="selectedColumns" > 
<a href="#" attributeid="19" >Driver License State</a> 
<a href="#" attributeid="21" >Email</a> 
<a href="#" attributeid="23" >Experience Level</a> 
<a href="#" attributeid="26" >First Name</a> 
<a href="#" attributeid="71" >Is Account Enabled</a> 
<a href="#" attributeid="39" >Last Contacted Date</a> 
<a href="#" attributeid="40" >Last Name</a> 
<a href="#" attributeid="41" >Middle Name</a> 
<a href="#" attributeid="6">Carrier</a> 
</div> 

Mam kolekcję linków. Każde łącze ma właściwość attributeid. Chciałbym filtrować według wartości atrybutu. Więc w powyższych linkach, jeśli mam wartość 41, zwrócę link Middle Name.filtr jQuery według wartości atrybutu

var link = $('.selectedColumns a:[attributeid==' + $(this).val() + ']'); 

To nie zadziałało?

+2

Należy pamiętać, że użycie atrybutów niestandardowych powoduje, że dokumenty [invalid] (http://validator.w3.org) w HTML4 i poniżej. W HTML5 możesz mieć prawidłowe niestandardowe atrybuty, jeśli zaczynają się od 'data-' (np. 'Dane-atrybutid'). Te są nadal nieważne we wcześniejszych wersjach, ale hej, tak jak i twój obecny. :-) –

+0

@ T.J. - Rozumiem, że w3c mówi, że to nie jest nie, ale kiedy budujesz "oprogramowanie", które jest mocno zależne od jQuery, cały czas korzystasz z atrybutów niestandardowych i nie martw się o walidację. – Mark

+2

Rozumiem, co mówisz, i zgadzam się z tobą, w rzeczywistości * tak samo jak W3C *, w przeciwnym razie nie zostaną dodane w HTML5. Mówi, że jeśli zamierzasz użyć * czegoś *, dlaczego nie wybierzesz nazwy pliku "data-coś", która * będzie * ważna do przodu? –

Odpowiedz

18

użycie pojedyncza = zamiast 2. Ponadto: shoudn't tam być AFAIK

var link = $('.selectedColumns a[attributeid=' + $(this).val() + ']'); 
15

Nie ma potrzeby, aby : lub podwójne = w twojej attribute-equals selector, powinien on być po prostu:

$('.selectedColumns a[attributeid=' + $(this).val() + ']'); 

także jeśli używasz nieprawidłowe atrybuty, należy rozważyć użycie data- attributes który ważne w HTML5, na przykład data-id zamiast attributeid.

26

Nie twierdząc, że jest to bardziej eleganckie, ale użycie filtra() w kolekcji pozwala na większą elastyczność w zakresie tego, co można dopasować i jest nieco mniej podatne na błędy niż konkatenacja ciągów.

var matching = $('.selectedColumns a').filter(function(){ 
        return $(this).attr('attributeid') == 41 
       }); 
    matching.prop('selected', true); 
Powiązane problemy