如何遍历项目列表并将其数据值推送到数组中
How can i loop through a list of items and push their data values into an array?
尝试遍历所有添加了数据ID的项目列表,我基本上想将这些值中的每一个都推入一个数组中,但不确定如何实现这一点或我需要在哪里放置循环索引,到目前为止我得到的代码是:
.JS
// Find all boxes and length
var box = _.els.grid.children(),
box_l = box.length,
i = 0;
box_arr = [];
//create array of all box datas
for ( i; i <= box_l; i++ ) {
box_arr.push( box.data('id')[i] );
}
console.log( box_arr );
.HTML
<ul id="grid" class="clearfix">
<li class="a" data-id="1"></li>
<li class="b" data-id="2"></li>
<li class="c" data-id="3"></li>
<li class="d" data-id="4"></li>
<li class="e" data-id="5"></li>
<li class="f" data-id="6"></li>
<li class="g" data-id="7"></li>
<li class="h" data-id="8"></li>
<li class="i" data-id="9"></li>
</ul>
您可以使用 jQuery map
方法:
var arr = $("#grid li").map(function() {
return $(this).data("id");
}).get();
这是一个工作示例。
现有代码的问题在于,在您的情况下,data
只返回一个字符串,而不是数组,因此box.data('id')[i]
是未定义的。
您需要做的就是修复此行:
box_arr.push( box.data('id')[i] );
你只想在框中获取第 i 个元素的 ID:
for (i = 0; i < box_l; i++) {
box_arr.push( box.eq(i).data('id') );
}
但是,使用 map() 等的不同方法可能是更好(更清洁)的选择。
var ids = [];
$('li[data-id]').each(function (index, value) {
ids.push($(value).data('id'));
});
更新,因为问题答案从未被接受。
这:只是看起来搞砸了:(见每个评论)
var box = _.els.grid.children(), // what is "_.els.grid."? _ is undefined
box_l = box.length,
i = 0; //semi colon?
box_arr = []; //no var?
我在每个变量上放置 var 的一个原因。(但这不是问题)
j查询答案:
var box = $('#grid > li');
var box_arr = [];
box.each(function() {
box_arr.push($(this).data('id'));
});
console.log(box_arr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="grid" class="clearfix">
<li class="a" data-id="1"></li>
<li class="b" data-id="2"></li>
<li class="c" data-id="3"></li>
<li class="d" data-id="4"></li>
<li class="e" data-id="5"></li>
<li class="f" data-id="6"></li>
<li class="g" data-id="7"></li>
<li class="h" data-id="8"></li>
<li class="i" data-id="9"></li>
</ul>
注意:我一直对此投了一些反对票,但是它的编写方式box_arr = [];
默认为window.box_arr = [];
,只是指出这一点,以防有人认为全局JavaScript变量是个好主意(我不认为) - 这是重点,而不是风格部分(我真的不在乎这两种方式)
但更重要的是,也许_.els.grid.children()
问题中未定义_
,所以这是一行无用的行,也可能var box = undefined,
这就是为什么 OP 代码实际上在发布时失败的原因。
更新为代码片段以显示代码实际有效。
HTML5 示例:
var box = document.getElementById('grid').children,
box_l = box.length,
i = 0,
box_arr = [],
numbersArray = []; // actual numbers
//put data in arrays
for (i; i < box_l; i++) {
box_arr.push(box[i].dataset.id);
numbersArray.push(box[i].dataset.id * 1);
}
console.log("Array:", box_arr, numbersArray);
<ul id="grid" class="clearfix">
<li class="a" data-id="1"></li>
<li class="b" data-id="2"></li>
<li class="c" data-id="3"></li>
<li class="d" data-id="4"></li>
<li class="e" data-id="5"></li>
<li class="f" data-id="6"></li>
<li class="g" data-id="7"></li>
<li class="h" data-id="8"></li>
<li class="i" data-id="9"></li>
</ul>
没有jQuery:
var box = document.getElementById('grid').children,
box_l = box.length,
i = 0,
box_arr = [];
//console.log(box, box_l);
//create array of all box datas
for (i; i < box_l; i++) {
box_arr.push(box[i].getAttribute('data-id'));
}
console.log("Array:", box_arr);
<ul id="grid" class="clearfix">
<li class="a" data-id="1"></li>
<li class="b" data-id="2"></li>
<li class="c" data-id="3"></li>
<li class="d" data-id="4"></li>
<li class="e" data-id="5"></li>
<li class="f" data-id="6"></li>
<li class="g" data-id="7"></li>
<li class="h" data-id="8"></li>
<li class="i" data-id="9"></li>
</ul>
相关文章:
- 使用数据数组创建多个类似组件
- WebAudio API数据数组大小
- Jquery 循环一次或在数据数组中显示一次数据
- Cakephp 访问不在模型数据数组上的输入
- 使用来自 Ajax 响应的 JSON 数据数组
- Angular JS(离子)数据数组到$scope元素
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 如何使用for循环语句通过Ajax发送大数据数组
- 压缩 JS 中的数据数组
- 传递的参数D3提示回调是完整的数据数组
- 如何在数据数组的每次迭代中创建一个内容为“i+1”的新 HTML 元素
- 在 laravel 4 上使用循环将数据数组存储到单个数组中
- 为什么它说输入数据数组的格式不正确 jqchart.
- Javascript - 使用变量 RegExp 匹配数据数组中的多个关键字
- 尝试将数据数组设置为从视图调用函数后$scope
- 如何在 PHP 中创建 jqplot 数据数组
- 如何使用该数据数组从左向右移动画布
- 如何根据数字列从 Parse 中对数据数组进行排序
- 为什么 php json 响应不会将数据数组发送回 ajax jquery 请求
- 如何将内容添加到 JQuery Flot 图表数据数组工具提示