在父元素中附加子元素?

Posted

技术标签:

【中文标题】在父元素中附加子元素?【英文标题】:Append child element in parent? 【发布时间】:2021-11-27 11:42:01 【问题描述】:

html 元素取自容器。如果父节点有子节点,则创建一个按钮并在按钮中插入 child.id from child。一切都在代码中工作,但不想要 appendChild (h2);

应该是这样的:

<button id = "parent2"> <h2> child1 </h2> <h2> child2 </h2> </button>
<div id="container">
    <div id="parent1"></div>
    <div id="parent2">
        <div id="child1"></div>
        <div id="child2"></div>
        <div id="child3"></div>
    </div>
</div>
<p id="demo"></p> 
var parent = document.getElementById("container").querySelectorAll("*");

for (let i = 0; i < parent.length; i++) 
    if(parent[i].hasChildNodes())
         var btn = document.createElement("BUTTON");  
         btn.id = parent[i].id;                  
         document.getElementById("demo").appendChild(btn); 
    
    
    let children = parent[i].childNodes;
    
    for (let i = 0; i < children.length; i++) 
        if(children[i])
         var h2 = document.createElement("H2");  
         h2.innerHTML = children[i].id;                  
         parent[i].appendChild(h2); 
        else
    
    

【问题讨论】:

【参考方案1】:

你的代码有很多错误:

这个document.getElementById("container").querySelectorAll("*"); 确实选择了一个容器的所有子容器(也包括嵌套容器)。 您不能嵌套两个循环遍历同一变量ichildNodes 不仅返回您想要的 3 个 div,还返回代表空格/换行符的所有节点。您需要将它们过滤掉,here few possible solutions。 您需要在按钮中插入h2 标签,但您将它们插入parent[i]

这应该可行:

var parent = document
  .querySelectorAll("#container > *");

for (let i = 0; i < parent.length; i++) 
    if(parent[i].hasChildNodes()) 
        var btn = document.createElement("BUTTON");
        btn.id = parent[i].id;
        document.getElementById("demo").appendChild(btn);

        let children = parent[i].childNodes;
        for (let j = 0; j < children.length; j++) 
            if (children[j].nodeName !== 'DIV') continue;
            var h2 = document.createElement("H2");
            h2.innerHTML = children[j].id;
            btn.appendChild(h2);
        
    
<div id="container">
  <div id="parent1"></div>
  <div id="parent2">
      <div id="child1"></div>
      <div id="child2"></div>
      <div id="child3"></div>
  </div>
</div>
<p id="demo"></p>

【讨论】:

感谢您的回答,一切正常,但如果我将 child4 和 child5 插入(child3 他成为 parent3)那么它就不起作用了。 好吧,你需要更好地解释你需要什么。那么按钮应该如何嵌套呢? Nowbie,我想问你是否可以更好地解释为什么它必须是 (children [j] .nodeName! == 'DIV') 以及为什么没有它它就不能工作?跨度>

以上是关于在父元素中附加子元素?的主要内容,如果未能解决你的问题,请参考以下文章

让子元素在父元素中水平居中align-items

实现子元素在父元素里面左右上下居中

jquery怎么在父元素事件中禁止子元素的事件?

悬停元素,在父元素兄弟姐妹子元素上显示悬停效果

如何使用 transform:translateX 在父元素上水平移动子元素 100%

在父元素中查找可见的类元素[重复]