我想知道有什么选择器可用于这些数据属性的HTML5。
以这段HTML为例:
<ul data-group="Companies">
<li data-company="Microsoft"></li>
<li data-company="Google"></li>
<li data-company ="Facebook"></li>
</ul>
是否有选择器可以获取:
所有元素data-company="Microsoft"在"Companies"下面
所有元素与数据公司!=“公司”下面的“微软”
在其他情况下,是否可以使用其他选择器,如“包含,小于,大于,等等……”。
jsFiddle演示
jQuery提供了几个选择器(完整列表),以便使您正在寻找的查询工作。为了解决你的问题“在其他情况下是否可以使用其他选择器,如“包含,小于,大于,等…”,你也可以使用包含,开始与结束,以查看这些html5数据属性。请参阅上面的完整列表,以便了解所有的选项。
上面已经介绍了基本的查询,使用John Hartsock的答案将是获得所有data-company元素的最佳选择,或者获得除Microsoft(或任何其他版本的:not)之外的所有元素。
为了将此扩展到您正在寻找的其他点,我们可以使用几个元选择器。首先,如果要执行多个查询,最好缓存父选择。
var group = $('ul[data-group="Companies"]');
接下来,我们可以在这个集合中寻找以G开头的公司
var google = $('[data-company^="G"]',group);//google
或者是那些含有“软”一词的公司
var microsoft = $('[data-company*="soft"]',group);//microsoft
也可以获得数据属性结尾匹配的元素
var facebook = $('[data-company$="book"]',group);//facebook
//stored selector
var group = $('ul[data-group="Companies"]');
//data-company starts with G
var google = $('[data-company^="G"]',group).css('color','green');
//data-company contains soft
var microsoft = $('[data-company*="soft"]',group).css('color','blue');
//data-company ends with book
var facebook = $('[data-company$="book"]',group).css('color','pink');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul data-group="Companies">
<li data-company="Microsoft">Microsoft</li>
<li data-company="Google">Google</li>
<li data-company ="Facebook">Facebook</li>
</ul>
jsFiddle演示
jQuery提供了几个选择器(完整列表),以便使您正在寻找的查询工作。为了解决你的问题“在其他情况下是否可以使用其他选择器,如“包含,小于,大于,等…”,你也可以使用包含,开始与结束,以查看这些html5数据属性。请参阅上面的完整列表,以便了解所有的选项。
上面已经介绍了基本的查询,使用John Hartsock的答案将是获得所有data-company元素的最佳选择,或者获得除Microsoft(或任何其他版本的:not)之外的所有元素。
为了将此扩展到您正在寻找的其他点,我们可以使用几个元选择器。首先,如果要执行多个查询,最好缓存父选择。
var group = $('ul[data-group="Companies"]');
接下来,我们可以在这个集合中寻找以G开头的公司
var google = $('[data-company^="G"]',group);//google
或者是那些含有“软”一词的公司
var microsoft = $('[data-company*="soft"]',group);//microsoft
也可以获得数据属性结尾匹配的元素
var facebook = $('[data-company$="book"]',group);//facebook
//stored selector
var group = $('ul[data-group="Companies"]');
//data-company starts with G
var google = $('[data-company^="G"]',group).css('color','green');
//data-company contains soft
var microsoft = $('[data-company*="soft"]',group).css('color','blue');
//data-company ends with book
var facebook = $('[data-company$="book"]',group).css('color','pink');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul data-group="Companies">
<li data-company="Microsoft">Microsoft</li>
<li data-company="Google">Google</li>
<li data-company ="Facebook">Facebook</li>
</ul>
纯/香草JS解决方案(这里是工作示例)
// All elements with data-company="Microsoft" below "Companies"
let a = document.querySelectorAll("[data-group='Companies'] [data-company='Microsoft']");
// All elements with data-company!="Microsoft" below "Companies"
let b = document.querySelectorAll("[data-group='Companies'] :not([data-company='Microsoft'])");
在querySelectorAll你必须使用有效的CSS选择器(目前Level3)
jQuery和Pure JS的速度测试(2018.06.29):测试在MacOs High Sierra 10.13.3、Chrome 67.0.3396.99(64位)、Safari 11.0.3(13604.5.6)、Firefox 59.0.2(64位)上执行。下图是最快浏览器(Safari)的测试结果:
PureJS在Chrome上比jQuery快12%,在Firefox上快21%,在Safari上快25%。有趣的是,Chrome的操作速度为每秒18.9M, Firefox为每秒26M, Safari为每秒160.9M(!)。
所以赢家是PureJS,最快的浏览器是Safari(比Chrome快8倍以上!)
在这里您可以在您的机器上执行测试:https://jsperf.com/js-selectors-x
jQuery UI有一个:data()选择器,也可以使用。它似乎从1.7.0版本开始就存在了。
你可以这样使用它:
获取具有data-company属性的所有元素
var companyElements = $("ul:data(group) li:data(company)");
获取所有数据公司等于微软的元素
var microsoft = $("ul:data(group) li:data(company)")
.filter(function () {
return $(this).data("company") == "Microsoft";
});
获得所有数据公司不等于微软的元素
var notMicrosoft = $("ul:data(group) li:data(company)")
.filter(function () {
return $(this).data("company") != "Microsoft";
});
等等……
新的:data()选择器需要注意的一点是,必须通过代码设置数据值才能被选中。这意味着要实现上述功能,仅在HTML中定义数据是不够的。你必须先这样做:
$("li").first().data("company", "Microsoft");
对于可能使用$(…)的单页应用程序,这很好。数据(“datakey”,“value”)。