【问题标题】:Extend array in jquery each loop在jquery每个循环中扩展数组
【发布时间】:2015-11-24 22:05:13
【问题描述】:

这可能是一个非常简单的问题,但尽管有很多“谷歌搜索”,我还是找不到解决方案:

我想在 jquery 每个循环中扩展一个数组。但是在循环完成后,数组再次为空。这是我的代码 sn-p:

var myarr = [];
var sum = 0;
$("#myDomListElement").each(function(i) {
    myarr.push(i);
    sum += sum + 1;
    alert("I have added " + i");
});

在此循环结束时,sum 的值 > 0,具体取决于循环迭代的次数。但是 myarr 在循环结束时是空的。如果我调试代码,我可以看到 myarr 每次迭代都会变得越来越大,但是一旦循环完成,myarr 就会再次为空。 (警报显示迭代已完成)。

主类型和数组有什么区别,有没有办法将元素推入每个循环内以在每个循环外使用?

最好的问候,

史蒂夫

【问题讨论】:

  • but as soon as the loop is completed the myarr is empty again. 是什么让你这么想?
  • 您的代码按原样工作。 (如果错字的双引号被删除)
  • 您的代码在这里工作得很好:jsfiddle.net/jfriend00/Lvvxrjhj 在用额外的引号修复了一个错字之后。
  • 双引号是一个复制粘贴错误——这里不相关。但为了更好的能见度,我清理得太多了。实际上,我使用了 $("#myListParent li .myclass").each... 而不是仅 $("#myDomElement").each... 这不起作用。如果我使用 Ziv Weissmann 建议的类,它就可以工作。但是为什么...???
  • 好吧,这似乎是我的浏览器的问题。我无法重现小提琴中的问题,当 Firebug 调试器稍后显示一些奇怪的行为时,我重新启动了 Firefox,现在一切都按预期工作。不好意思,好像是我的环境。史蒂夫

标签: jquery arrays loops


【解决方案1】:

由于多次使用同一个 ID,您遇到了问题, ID 应该是唯一的,只有 1 个元素的 ID = myDomListElement。

这可能会导致你的数组最终为空。

我已更改为“类”的用法,它似乎工作正常

fiddle

var myarr = [];
var sum = 0;
$(".myDomListElement").each(function(i) {
    myarr.push(i);
    sum += sum + 1;
    //alert("I have added " + i);
});

console.log(myarr);

【讨论】:

  • 你好 Ziv,谢谢你的回答。实际上,使用类引用它可以工作,而使用 id 引用则不能。但为什么?至少循环在警报显示时被迭代一次(当然没有引号拼写错误)。循环外的总和是正确的,但 myarr 不是......嗯......
  • 是的,循环很奇怪地迭代了元素,但最终在某个地方崩溃了......除了 jQuery 选择器必须有效之外,没有其他解释,在这种情况下,它们不是,因此预计会出乎意料 ;) 人们也投反对票太快了...:/我投票反对,但这是一个有效的问题,带有血统文本,不应该被否决...!
  • 您好 Ziv,重启浏览器后一切正常。我认为这是 Firebug 和 Firefox 组合的一些不一致...感谢您的支持!
猜你喜欢
  • 2016-04-21
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2016-12-21
  • 2016-10-24
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多