jQuery.each 和 .html 的行为不符合预期

标签 jquery

我希望这样:

$('.iat_map').each(function(i,el) {
    $(el).html(opt_list);
});

还有这个:

$('.iat_map').html(opt_list);

做同样的事情。但是,当我尝试前者时,它会清除内容而不是用 opt_list 替换它。 。 ( .iat_map 指的是一堆 <selects> )。

如果我console.log(opt_list)里面each() ,它按预期输出。

什么给了?

Made a fiddle 。完美重现(至少在 Chrome 21 中)。

最佳答案

问题是 opt_list 是一个 jQuery 对象(意味着 jQuery 将选项放入 DOM 元素中),当您附加 jQuery 对象时,DOM 元素将从其旧位置删除并添加到其位置新地点。

这就是为什么当您使用 .each 时,您会注意到选项仅位于最后一个选择上。

显然,当您执行 $('.iat_map').html(opt_list); 时,jQuery 会在附加 DOM 元素之前克隆它们。

我建议将 opt_list 制作为字符串,而不是 jQuery 对象。

关于jQuery.each 和 .html 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910076/

相关文章:

javascript - 在移动调试时,InnerWidth $(window).width() 与实际宽度不匹配

jquery - slimScroll 不可拖动

javascript - 侧边栏 Bootstrap : 3 clicks necessary to open it on mobile

jquery - 更改输入元素时,使用动态自定义数据在 fullcalendar 中渲染事件

jquery - 如何检查是否在 jQuery 中选中了某个选择选项

javascript - 如何向 slider 添加项目符号导航

javascript - $().each vs $.each vs for jQuery 中的循环?

javascript - Div slider 不起作用 - Javascript

Jquery 侧导航切换

javascript - 如何设置 ajax 请求开始到成功之间的最短时间?