通过$ .each()获取每个元素的属性

时间:2014-05-30 02:02:23

标签: javascript jquery html

尝试通过$('div').attr('data', 'ip')执行.each()只返回undefined

我们说我有4个div

    <div class="box" data-ip="ipvalue">content</div>
    <div class="box" data-ip="ipvalue">content</div>
    <div class="box" data-ip="ipvalue">content</div>
    <div class="box" data-ip="ipvalue">content</div>

我需要迭代每一个并获取data-ip值。

我的代码,它只返回undefined(server,serverObj,是变量)。

var serversObj = $('.server');
serversObj.each(function(index, el) {
    return $(this).data('ip');
});

我做错了什么?

4 个答案:

答案 0 :(得分:2)

如果要获取所有元素的所有值

,则需要使用map
var ips = $(".box")  //get all of the elements
              .map( 
                  function(){ 
                      return $(this).data("ip"); //get the value from the attribute
                  }
              ).get();  //returns an Array 

Fiddle

答案 1 :(得分:0)

$('.box').each(function(){
    console.log($(this).attr('data-ip'));

});

答案 2 :(得分:0)

首先,这是完全错误的:

$('div').attr('data', 'ip')

这是将名为data的属性设置为值"ip",它不会涉及数据属性。实际上,您正在执行此操作:<div data='ip'>

如果要访问名为data-ip的数据属性,则需要

$('div').data('ip')

如果您想要访问一系列元素,则不能仅return来自.each循环。该值被丢弃。您需要将map输入元素集$('.server').map(function () { return $(this).data('ip') }) 输出到一组输出:

.server

这将生成一个数组,其中每个元素都与data-ip的{​​{1}}属性匹配。

答案 3 :(得分:0)

以下是您提供的标记示例的代码。

var serversObj = $('.box'),
Ipvals = [];
serversObj.each(function(index, el) {
    Ipvals.push( $(this).data('ip'));
});
console.log( Ipvals);

您还可以使用$ .map()返回相同的数组。