2017-09-25 41 views
-5

我需要一个递归选择所有子元素但不选择元素(以及那些子元素)的函数,如果它们具有“foo”属性的话。如何以递归方式选择元素下的所有子项Javascript

<section> 
    <div> 
    <span foo> 
    <input> 
    </span> 
    </div> 
    <p> 
    <img> 
    </p> 
</section> 
//should return [section, div, p, img] 

我需要原始JavaScript,请

编辑: 我想是这样的:

$tag.querySelectorAll(":not([foo])") 

但querySelectorAll( “:不是([富])”)仍然会返回儿童未选定的元素。

+0

林坚持与不选择的孩子来说,我已经使用querySelectorAll试过(“:不是([富])”),但仍然会返回下的元素美孚。 –

回答

1

您可以使用element.querySelectorAll()这里的:not改性剂,与[attr]选择在一起:

var nonFooElements = parentElement.querySelectorAll("*:not([foo])"); 

要知道,这种通话将适度昂贵,因为选择不与ID或开始classname,所以不要做大量的工作。

我改编自这一个这样的回答:https://stackoverflow.com/a/21975970/5009210

+0

这不会选择FooElements,但它会选择foo元素的子元素。这是我坚持的部分。 –

相关问题