我正在尝试通过jQuery的.each()
函数设置一个数组,但似乎我没有正确地执行它?
我在html中有属性,例如:
<div class="cheers" data-fname = "fname" data-lname="lname">some ish..</div><!-- going through a while loop!-->
然后我有一个jquery函数做类似的事情
var arrayMe = [];
$(".cheers").each(function(index){
arrayMe[index] = $(".cheers").attr('data-fname')+","+$(".cheers").attr('data-lname');
});
然后,当我尝试做各种警报时:
alert(arrayMe); //this gives me the fname,lname
alert(arrayMe[0]); //this gives me the first fname,lname in the array
alert(arrayMe[0][1]); //this SUPPOSED to give me the first lname, but it gives me a letter...
答案 0 :(得分:6)
您必须使用arrayMe[1]
代替arrayMe[0][1]
。
你收到一封信,因为arrayMe[0]
是一个字符串,arrayMe[0][1]
检索给定字符串的第二个字符。它相当于arrayMe[0].charAt(1)
。
如果要构建2D数组,请使用:
var arrayMe = [];
$(".cheers").each(function(index){
var $this = $(this);
arrayMe[index] = [$this.attr('data-fname'),
$this.attr('data-lname')];
});
alert(arrayMe); // Array. Shows all pairs, eg: [['fname', 'lname'], ...]
alert(arrayMe[0]); // Array. Shows first pair, eg: ['fname', 'lname']
alert(arrayMe[0][0]); // String. fname eg: 'fname'
alert(arrayMe[0][1]); // String. lname eg: 'lname'
(我还修改了代码中的另一个问题,将$('.cheers')
替换为$(this)
)
答案 1 :(得分:1)
如果要分别访问fname和lname,请将它们放在一个数组中:
var arrayMe = [];
$(".cheers").each(function(index){
arrayMe[index] = [$(this).attr('data-fname'),$(this).attr('data-lname')];
});
此外,$(this).attr
会为您提供当前元素的属性,其中$(".cheers").attr
将始终为您提供第一个元素的属性
答案 2 :(得分:1)
这个怎么样:
var arrayMe = $(".cheers").map(function() {
return [[ $(this).data('fname'), $(this).data('lname') ]];
}).get();
请参阅squint的注释,以解释为什么需要双返回数组。
答案 3 :(得分:0)
从我可以看到你没有将值添加到数组中,而是添加到存储在arrayMe [index]中的字符串中。
在存储到数组中时尝试使用以实现我认为您想要的内容:
var arrayMe = [];
$(".cheers").each(function(index){
arrayMe[index][0] = $(".cheers").attr('data-fname');
arrayMe[index][1] = $(".cheers").attr('data-lname');
});
答案 4 :(得分:0)
您必须将代码更改为:
arrayMe[index] = [$(".cheers").attr('data-fname'), $(".cheers").attr('data-lname')];