结合$和_来获取数据值?

ppa*_*ler 3 javascript jquery underscore.js

我有一个带有data属性的jquery元素列表.

现在我想获得这些数据属性的列表.

由于data-attribute是某种对象属性,我认为这可能适用于下划线pluck方法.

这甚至可能吗?

看到这个简短的例子:

var divs = $("div");

// now do something

// expected result: [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.com/libraries/underscore.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<div data-foo="1">a</div>
<div data-foo="2">b</div>
<div data-foo="3">c</div>
<div>x</div>
Run Code Online (Sandbox Code Playgroud)

基于@ romeo-sierra这是我写下来的方式(因为我已经有了jquery对象).下划线是多余的

var foos = $("div").map(function() {
  return $(this).data("foo");
}).toArray();

console.log(foos);
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div data-foo="1">a</div>
<div data-foo="2">b</div>
<div data-foo="3">c</div>
<div>x</div>
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 7

Vanilla JS可以很好地实现这一点,不需要jQuery或任何其他库:

const foos = [...document.querySelectorAll('[data-foo]')]
  .map(elm => elm.dataset.foo);
console.log(foos);
Run Code Online (Sandbox Code Playgroud)
<div data-foo="1">a</div>
<div data-foo="2">b</div>
<div data-foo="3">c</div>
<div>x</div>
Run Code Online (Sandbox Code Playgroud)

ES5版本:

var foos = Array.prototype.map.call(document.querySelectorAll('[data-foo]'), function(elm) {
  return elm.dataset.foo;
});
console.log(foos);
Run Code Online (Sandbox Code Playgroud)
<div data-foo="1">a</div>
<div data-foo="2">b</div>
<div data-foo="3">c</div>
<div>x</div>
Run Code Online (Sandbox Code Playgroud)

  • 这是美丽的,请注意`[... document.querySelectorAll('[data-foo]')]`在IE12下无法正常工作 (2认同)