【问题标题】:Remove attribute from parent in array?从数组中的父级删除属性?
【发布时间】:2021-02-02 10:30:53
【问题描述】:

从子 div 中删除数据可以正常工作,但是如何从 forEach 中的数组中的父级删除数据?

<div class="parent" data-parent="parentdata">
   <div class="child1" data-child="child1data"></div>
   <div class="child2" data-child="child1data"></div>
   <div class="child3" data-child="child1data"></div>
</div>
<button onclick="myFunction()">Click me</button>
  var divsname = Array.prototype.slice.call(document.getElementsByClassName("parent"));
  divsname.forEach(function(div){
  var clonedDiv = div.cloneNode(true);
  Array.from(clonedDiv.querySelectorAll(".parent [data-child]")).forEach((elem) =>     elem.removeAttribute("data-child"));
  //How get parent data and remove?
  
  var removedataHTML = clonedDiv.innerHTML;
  alert(removedataHTML);
  )}

【问题讨论】:

    标签: javascript arrays foreach attributes parent


    【解决方案1】:

    使用document.querySelectorAll() 查找.parent 节点,并对其进行迭代NodeList.forEach()。从父级中删除属性。找到所有具有[data-child] 属性的父级的子级,并从中删除该属性。

    本示例中的 CSS 为具有 data-parentdata-child 属性的节点添加颜色。移除它们会移除颜色。

    function myFunction() {
      document.querySelectorAll('.parent')
        .forEach(parent => {
          parent.removeAttribute("data-parent");
          parent.querySelectorAll('[data-child]')
            .forEach(child => {
              child.removeAttribute("data-child");
            });
        });
    }
    [data-parent] {
      color: gold;
    }
    
    [data-child] {
      color: purple;
    }
    <div class="parent" data-parent="parentdata">data-parent
      <div class="child1" data-child="child1data">data-child</div>
      <div class="child2" data-child="child1data">data-child</div>
      <div class="child3" data-child="child1data">data-child</div>
    </div>
    <button onclick="myFunction()">Click me</button>

    另一种选择是分开处理父母和孩子。

    注意:在本例中,我使用dataset property 来处理数据集属性。

    function myFunction() {
      document.querySelectorAll('.parent[data-parent]')
        .forEach(node => {
          delete node.dataset?.parent;
        });
        
      document.querySelectorAll('.parent [data-child]')
        .forEach(node => {
          delete node.dataset?.child;
        });
    }
    [data-parent] {
      color: gold;
    }
    
    [data-child] {
      color: purple;
    }
    <div class="parent" data-parent="parentdata">data-parent
      <div class="child1" data-child="child1data">data-child</div>
      <div class="child2" data-child="child1data">data-child</div>
      <div class="child3" data-child="child1data">data-child</div>
    </div>
    <button onclick="myFunction()">Click me</button>

    【讨论】:

      【解决方案2】:

      您的问题如下:您输入的是)} 而不是})

      那么看看这段代码:

      function myFunction() {
                  var divsname = Array.prototype.slice.call(document.getElementsByClassName("parent"));
                  divsname.forEach(function(div){
                  var clonedDiv = div.cloneNode(true);
                  Array.from(clonedDiv.querySelectorAll(".parent [data-child]")).forEach((elem) => elem.removeAttribute("data-child"));
                  //How get parent data and remove?
        
                  var removedataHTML = clonedDiv.innerHTML;
                  alert(removedataHTML);
                  }) // The problem was on this line.
              }
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Array iteration test</title>
      </head>
      <body>
          <div class="parent" data-parent="parentdata">
              <div class="child1" data-child="child1data"></div>
              <div class="child2" data-child="child1data"></div>
              <div class="child3" data-child="child1data"></div>
           </div>
           <button onclick="myFunction()">Click me</button>
      </body>
      </html>

      【讨论】:

        【解决方案3】:

        你可以使用 elem.parentElement

        function myFunction(){
              var divsname = Array.prototype.slice.call(document.getElementsByClassName("parent"));
              divsname.forEach(function(div){
              var clonedDiv = div.cloneNode(true);
              Array.from(clonedDiv.querySelectorAll(".parent [data-child]")).forEach((elem) =>   {  
                elem.removeAttribute("data-child");
                if(elem.parentElement.hasAttribute("data-parent")){ //check for the attribute and remove it
                  elem.parentElement.removeAttribute("data-parent")
                }
              });
              //How get parent data and remove?
              
              var removedataHTML = clonedDiv.outerHTML;
              alert(removedataHTML);
        
        
        output:
            <div class="parent">
               <div class="child1"></div>
               <div class="child2"></div>
               <div class="child3"></div>
            </div>
        

        【讨论】:

          猜你喜欢
          • 2018-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-04
          • 1970-01-01
          • 2018-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多