Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 识别唯一的数据属性_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 识别唯一的数据属性

Javascript 识别唯一的数据属性,javascript,jquery,dom,Javascript,Jquery,Dom,我正在创建一个jquery插件,它将根据数据属性对列表进行排序: <ul class="reorder"> <li data-rating="1" data-category="3">Rating 1 - Category 3</li> <li data-rating="5" data-category="1">Rating 5 - Category 1</li> <li data-rating="2" data-ca

我正在创建一个jquery插件,它将根据数据属性对列表进行排序:

<ul class="reorder">
  <li data-rating="1" data-category="3">Rating 1 - Category 3</li>
  <li data-rating="5" data-category="1">Rating 5 - Category 1</li>
  <li data-rating="2" data-category="2">Rating 2 - Category 2</li>
  <li data-rating="7" data-category="1">Rating 7 - Category 1</li>
  <li data-rating="21" data-category="3">Rating 21 - Category 3</li>
  <li data-rating="19" data-category="2">Rating 19 - Category 2</li>
</ul>
  • 评级1-类别3
  • 评级5-类别1
  • 评级2-类别2
  • 评级7-类别1
  • 评级21-类别3
  • 评级19-类别2
由于我不知道将添加多少数据属性,我希望能够在列表中循环并确定唯一的数据属性(而不是这些属性的值),以创建一组链接:

<ul class="reorder-nav">
  <li><a href="#" data-sort="rating">Sort by rating</a></li>
  <li><a href="#" data-sort="category">Sort by category</a></li>
</ul>
我的基本想法是循环遍历每个列表项,创建一个数据属性数组,然后过滤该数组中的唯一属性


我可以使用
.data()
创建一个包含所有数据属性的数组,但除此之外,我有点卡住了,因此希望您能提供任何建议。

您可以这样做来提取data-x属性名称:

var uniqueAttrs = {};
$('.reorder li').each(function(){
   $.each(this.attributes, function(_,a){
     if (a.name.indexOf('data-')===0) {
         uniqueAttrs[a.name.slice(5)] = 1;
     }
   });
});
然后您可以迭代
uniqueAttrs
的键:

for (var attr in uniqueAttrs) {
    console.log(attr); // for example "sort" or "ranking"
}

如果您能够支持有限的一组浏览器,您可以通过使用而不是
属性来简化循环

,这是一个完美回答问题的可靠解决方案