Javascript如何使用包装器将节点附加到正确的索引中

Javascript如何使用包装器将节点附加到正确的索引中,javascript,indexof,nodelist,Javascript,Indexof,Nodelist,我需要获得用户输入的标记(表),如果表不包含带有class=“table”的div,我需要添加div&class。我需要忽略任何其他子元素,例如p、span,并且只忽略带有表的目标元素 <div class="parent"> <div class="table"><table></table></div> <div class="table"><table></table></div&

我需要获得用户输入的标记(表),如果表不包含带有class=“table”的div,我需要添加div&class。我需要忽略任何其他子元素,例如p、span,并且只忽略带有表的目标元素

<div class="parent">
  <div class="table"><table></table></div>
  <div class="table"><table></table></div>
  <table></table>
  <div><table></table></div>
  <div class="table"><table></table></div>
  <p></p>
  <span></span>
</div>

我已经尝试过了,但是它在索引的底部附加了一个包装器div。如何让节点以正确的顺序附加包装器div?谢谢。

我想我明白你想做什么了。这应该找到没有“table”类的子节点,并将它们包装在带有“table”类的div中。当您运行代码段时,它不会显示任何内容,因为您的元素没有任何内容,但您应该能够检查它们以查看更改

//获取所有父div
var parents=document.getElementsByClassName(“父”);
//循环父div
对于(var i=0;i

最好使用for/loop(使用
map
这里是一个反模式)迭代父节点的子节点,并用新创建的元素替换当前子节点

检查dev工具中的输出以查看更改

const parent=document.querySelector('.parent');
const{childNodes}=父节点;
for(设i=0;i


所以所有与选择器
div.tabble
不匹配的
.parent
的直接子级都应该用该元素包装?是的,所以用户在任何时候输入表时,如果不添加div class=“table”作为直接父级,就应该添加div和类。这很好,但是,它需要忽略不包含“table”作为childrent的任何其他元素,这不是最初的问题。三小时后用全新的要求更新你的问题有点垃圾。是的,我很抱歉更新了这个问题。
[].map.call(table, (node) => {
  if (!node.parentNode.classList.contains('table')) {
    const parent = document.getElementsByClassName('parent');
    [].map.call(parent, (nodeChild) => {
      const addWrap = document.createElement('div');
      addWrap.classList.add('table');
      addWrap.appendChild(node);
      nodeChild.append(addWrap);
    });
  }
});