javascript - jQuery .replaceWith 在循环中卡住

标签 javascript jquery html while-loop

今天我在编码,我用 while 尝试了一些东西循环和 jQuery .replaceWith但后来循环从未停止,我不知道为什么。

这是我的 html 代码:

<div class="x"></div><div class="x"></div><div class="x"></div>

这是我的 javascript 代码:

while($(".x").length !== 0) {
 $(".x:nth-child(1)").replaceWith('<div id="x"></div>');
}

此代码会卡住浏览器,但我不知道为什么。

我也试过这个:

while($(".x").length !== 0) {
 $(".x:nth-child(1)").remove();
}

那行得通。

我想做的是用 .x 类替换所有元素与 <div id="x"></div>

知道我的代码出了什么问题吗?

最佳答案

问题是 .x:nth-child(1) 匹配具有类 x 的元素,这是他父级的第一个子级。

在您的第一种情况下,您将第一个匹配项替换为另一个元素,因此 x 类的其他元素不会成为其父项的第一个子项。

在您的第二个代码中,您删除了它们,因此下一个具有 x 类的元素将成为第一个子元素。

此外,

  • 避免在循环中使用$。搜索 DOM 很昂贵,最好在循环之前将结果存储在变量中。
  • 您可以只测试 .length 而不是 .length !== 0
  • 避免在循环中从静态字符串创建元素。您可以之前创建它并在循环内克隆它。
  • 要遍历与选择器匹配的所有元素,最好使用 each
  • 设置 id 时要小心,它们在文档中必须是唯一的。

关于javascript - jQuery .replaceWith 在循环中卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25221095/

相关文章:

javascript - jstree : delete node event not working

html - 在同一个导航栏上制作 Logo 和列表菜单

html - Chrome 标题上方的大白色间隙

javascript - 使用indexOf匹配的JS代码是如何工作的?

javascript - 如何检索从 jQuery 中的 servlet 发送的项目的 JSON 数组

javascript - 无法按模型选择元素

javascript - 通过点击功能显示图像

javascript - 我如何在 Div 的 HOVER 上使它在 div 上淡出

javascript - 从 javascript 读取实时日志文件

css - 如何在 HTML Canvas 中的移动分辨率上添加另一个图标