代码之家  ›  专栏  ›  技术社区  ›  WhiZTiM

如何在JavaScript中获取具有特定属性的所有子元素

  •  3
  • WhiZTiM  · 技术社区  · 7 年前

    我有一个从此表达式中检索到的对象:

    const element = document.querySelector("...my selector...");
    

    我需要获取所有具有特定属性的子元素,我知道获取所有子元素的唯一方法是:

    const children = Array.from(element.childNodes);
    

    但现在每个 child 在里面 children 不是 element ,而不是 node ,因此,我无法使用 getAttribute('') 在他们身上;

    如何“铸造”a Node Element ?, 还是有更好的方法?

    3 回复  |  直到 7 年前
        1
  •  8
  •   Quentin    7 年前

    如何将节点“强制转换”到元素?

    你不能。

    元素是节点的子集。

    如果它还不是元素,那么就不能将其转换为元素。

    考虑:

    <div>Hello, <strong>World</strong></div>
    

    您有两个子节点。文本节点 "Hello, " 和强元素节点。

    治疗没有意义 “您好,” 作为一个元素。


    考虑使用 children 而不是 childNodes . 它只能获取 要素 儿童


    我需要获取所有具有特定属性的子元素

    在这种情况下,您最好只使用一个选择器,这样您就可以在第一时间得到它。除了现有的选择器之外,还需要一个子组合器和一个属性选择器。那么你需要使用 All 要获得多个结果:

    document.querySelectorAll("...my selector... > [someAttribute]"
    
        2
  •  4
  •   epascarello    7 年前

    您说过要选择具有特定属性的所有子级。因此,使用属性选择器使用querySelectorAll选择它们。

    var elems = document.querySelectorAll("#theParentSelector > [theChildsAttribute]")
    console.log(elems.length)
    Array.from(elems).forEach( function (el) {
       console.log(el.getAttribute("theChildsAttribute"))
    });
    <div id="theParentSelector">
      <div theChildsAttribute="1">Foo 1</div>
      <div>Bar</div>
      <div theChildsAttribute="2">Foo 2</div>
      <div theChildsAttribute="3">Foo 3</div>
    </div>
        3
  •  3
  •   Carl Edwards monkbroc    7 年前

    你会使用 children 要访问所有基于HTML的节点,请执行以下操作:

    document.querySelector("...my selector...").children