按属性值过滤jQuery

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

我有一组链接,每个链接都有一个属性id。我想按属性值进行过滤。因此在上面的链接中,如果我的值为41,则会返回Middle Name链接。

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

这个没有起作用吗?


3
请注意,使用自定义属性会导致在HTML4及以下版本中出现无效的文档。在HTML5中,如果自定义属性以data-开头(例如data-attributeid),则可以具有有效的自定义属性。这些在早期版本中仍然无效,但是嘿,您当前的版本也是如此。 :-) - T.J. Crowder
1
@T.J. - 我知道w3c说这是不行的,但是当你构建依赖于jQuery的“软件”时,你经常使用自定义属性,并且不担心验证。 - Mark
3
我明白你的意思并且同意,W3C也是这么认为的,否则他们就不会将其添加到HTML5中。他的意思是,如果你要使用某个东西,为什么不选择一个将来也可以使用的“data-something”属性名称呢? - Nick Craver
2
继续Nick的话题:是的,它们是功能性的,我从未遇到过无法正确处理它们的浏览器,并且我一直在使用自定义属性。只是验证(这是一个链接,因为它在我的早期评论中也是如此;愚蠢的StackOverflow没有将链接下划线化)是一个非常有用的工具,因此在您切换到新的doctype后设置自己以便可以使用它是一件好事(tm)。 - T.J. Crowder
1
哇,我上一条评论有很多语法错误,不过还是留下来了,以防对某些人有所帮助。 - Nick Craver
3个回答

40

并不是说这种方法更加优雅,但是在集合上使用filter()允许您更灵活地匹配内容,并且比字符串拼接更少出错。

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

33

使用单个等号而不是两个等号。 此外,据我所知,应该不需要冒号。

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

21

在您的属性等于选择器中,不需要使用冒号:或双等号=,应该只是:

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

如果你正在使用无效的属性,请考虑使用data-属性,它们在HTML5中是有效的,例如使用data-id代替attributeid


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接