【发布时间】:2011-02-22 21:40:13
【问题描述】:
我需要根据存储在元素的.data() 对象中的值来选择元素。至少,我想使用选择器选择顶级数据属性,可能是这样的:
$('a').data("category","music");
$('a:data(category=music)');
或者选择器可能是常规属性选择器格式:
$('a[category=music]');
或属性格式,但带有说明符以表明它在.data()中:
$('a[:category=music]');
我发现James Padolsey's implementation 看起来很简单,但很好。该页面上显示的镜像方法上方的选择器格式。还有这个Sizzle patch。
出于某种原因,我记得不久前读过 jQuery 1.4 将支持对 jquery .data() 对象中的值的选择器。然而,现在我正在寻找它,我找不到它。也许这只是我看到的一个功能请求。是否对此有支持,我只是没有看到它?
理想情况下,我希望使用点符号支持 data() 中的子属性。像这样:
$('a').data("user",{name: {first:"Tom",last:"Smith"},username: "tomsmith"});
$('a[:user.name.first=Tom]');
我还想支持多个数据选择器,其中只找到具有所有指定数据选择器的元素。常规的 jquery 多重选择器执行 OR 操作。例如,$('a.big, a.small') 选择具有类big 或small 的a 标签)。我正在寻找 AND,可能是这样的:
$('a').data("artist",{id: 3281, name: "Madonna"});
$('a').data("category","music");
$('a[:category=music && :artist.name=Madonna]');
最后,如果比较运算符和正则表达式功能可用于数据选择器,那就太好了。所以$(a[:artist.id>5000]) 是可能的。我意识到我可能可以使用filter() 完成大部分工作,但最好有一个简单的选择器格式。
有哪些解决方案可以做到这一点?詹姆斯的 Padolsey 是目前最好的解决方案吗?我关心的主要是性能,还有额外的特性,比如子属性点表示法和多个数据选择器。是否有其他实现支持这些东西或在某些方面更好?
【问题讨论】:
-
使用 jquery ui core api.jqueryui.com/category/ui-core 它有一个 :data() 选择器