javascript - append 动态元素时组织 DOM

标签 javascript html dom append

我有 2 个输入 和一个 p 元素

我仅 append 一个包装 div 输入元素,但是当我 append 元素时,元素的顺序会发生变化。

我的意思是,正如您所看到的,第一个是 p 元素。但如果删除 JavaScript 代码,p 元素将位于第二行

我们如何解决这个问题?

<强> JSFIDDLE

var input = document.querySelectorAll('input');
for (var i = 0; i < input.length; i++) {
  if (input[i].type == "text") {

    // Create wrapper div
    var div = document.createElement("div");
    document.body.appendChild(div);
    div.appendChild(input[i]);

  }
}
<input type="text" value="first" />
<p>Lorem</p>
<input type="text" value="third" />

最佳答案

听起来你基本上是在尝试包装每个 <input><div>而不改变它在 DOM 中的位置。正如您所发现的,appendChild执行它在锡上所说的操作,即将元素添加到父级子级的末尾。

要将元素放置在末尾以外的位置,请使用 insertBefore replaceChild 。后者看起来像这样:

var inputs = document.querySelectorAll('input');

for (var i = 0; i < inputs.length; i++) {
  var input = inputs[i];
  if (input.type === 'text') {
    var div = document.createElement('div');
    input.parentElement.replaceChild(div, input);
    div.appendChild(input);
  }
}
div { border: 1px solid blue; }
<input type="text" value="first" />
<p>Lorem</p>
<input type="text" value="third" />

或者,更简洁地说:

Array.prototype.forEach.call(document.querySelectorAll('input[type=text]'), input => {
  const div = document.createElement('div');
  input.parentElement.replaceChild(div, input);
  div.appendChild(input);
});
div { border: 1px solid blue; }
<input type="text" value="first" />
<p>Lorem</p>
<input type="text" value="third" />

关于javascript - append 动态元素时组织 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681179/

相关文章:

javascript - 如何删除 div 的可拖动事件?

javascript - 追加到容器 div

javascript - "file"对象没有 'path' 属性。 ( typescript )

javascript - 尝试获取多个图像时,Angular observable 抛出错误,状态代码为 200

javascript - 如何使用 jQuery 正确克隆按钮(和其他东西)?

javascript - Jquery:淡入图像 src 交换

javascript - 在html页面中使用多个不同的js文件的问题

javascript - 动态加载.js文件时捕获onload事件?

javascript - 使用模板字符串附加 HTML

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?