web-dev-qa-db-fra.com

Filtre jQuery par une valeur d'attribut

<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>

J'ai une collection de liens. Chaque lien a une propriété d'attribut. Je voudrais filtrer par valeur d'attribut. Donc, dans les liens ci-dessus, si j'ai une valeur de 41, cela retournerait le lien du deuxième prénom.

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

Cela n'a pas fonctionné?

21
Mark

utilisez un seul = au lieu de 2. De plus, le: ne devrait pas être là afaik

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

Ne pas prétendre que cela est plus élégant, mais l'utilisation de filter () sur une collection permet beaucoup plus de flexibilité sur ce sur quoi vous pouvez correspondre, et est un peu moins sujet aux erreurs que la concaténation de chaînes.

var matching = $('.selectedColumns a').filter(function(){
                   return $(this).attr('attributeid') == 41
                });
    matching.prop('selected', true);
34
Jeff Lowery

Pas besoin de : ou double = dans votre sélecteur égal à l'attribut , il devrait simplement être:

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

De plus, si vous utilisez des attributs non valides, pensez à utiliser data- attributs qui sont valides en HTML5, par exemple data-id au lieu de attributeid.

19
Nick Craver