我在DOM中选择了一组元素,如下所示:
var menu_items = $('#ubermenu-nav-main-0-primary > li a span')
.not('#ubermenu-nav-main-0-primary > li ul li a span');
menu_items.each(function(i){
var strings = [];
strings.push = this.innerHTML;
console.log(strings);
});
将所有元素推送到我的数组后 - 我真的希望数组以数字方式编制索引,但实际得到的结果如下:
有什么不对劲?
答案 0 :(得分:1)
不要在每次迭代中覆盖数组,在each()
循环外面进行声明:
var strings = [];
menu_items.each(function(i){
strings.push(this.innerHTML);
console.log(strings);
});
答案 1 :(得分:1)
var menu_items = $('#ubermenu-nav-main-0-primary > li a span')
.not('#ubermenu-nav-main-0-primary > li ul li a span');
var strings = [];
menu_items.each(function(i){
strings.push = this.innerHTML;
console.log(strings);
});
您需要在每个循环之外设置字符串数组。
答案 2 :(得分:1)
要将节点文本转换为数组,请考虑使用jQuery's .map()
。像这样:
var menu_items = $('#ubermenu-nav-main-0-primary > li a span')
.not('#ubermenu-nav-main-0-primary > li ul li a span');
var strings = menu_items.map (function (){
return this.innerHTML.trim ();
} ).get ();
console.log (strings);
注意:强>
trim
前导和尾随空格。textContent
代替innerHTML
。答案 3 :(得分:1)
你有两个问题,在每次迭代时重新定义数组并使用键而不是push方法。
var strings = []; //<-- defined outside
menu_items.each(function(i){
strings.push(this.innerHTML); //<-- push is a method
console.log(strings);
});
或者我会这样做的方式
var strings = menu_items.each(function(ind, elem){ return elem.innerHTML; }).get();