我的jQuery数组没有数字索引?

时间:2015-11-17 12:40:10

标签: javascript jquery arrays

我在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);  
}); 

将所有元素推送到我的数组后 - 我真的希望数组以数字方式编制索引,但实际得到的结果如下:

console

有什么不对劲?

4 个答案:

答案 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);

注意:

  1. 从页面获取文本时,您几乎总是希望trim前导和尾随空格。
  2. 您可能希望使用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();