首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在纯Javascript中,如何获取body标记中除某个div及其子元素之外的所有元素?

在纯Javascript中,如何获取body标记中除某个div及其子元素之外的所有元素?
EN

Stack Overflow用户
提问于 2012-10-30 04:55:40
回答 4查看 2.5K关注 0票数 2

我试图查找body标记中的所有元素,但有一个元素(div)具有特定的“隐藏”类类型,我想从元素数组中排除它及其子元素。

下面是我的var,它包含了body中的所有元素:

代码语言:javascript
运行
复制
allTagsInBody = document.body.getElementsByTagName('*');

下面是我想从这个列表中排除的div:

代码语言:javascript
运行
复制
<div class="myHiddenElement"> 
    <button>Click here</button>
    <div> <button>Click here</button> </div>
    <button>Click here</button>
</div>

问题是我不知道div里面有多少元素,也不知道它们嵌套了多远。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-30 08:32:22

当您遍历每个元素时,不仅需要检查它是否包含隐藏的类,还需要检查它的任何父元素是否包含该类。因此,您需要递归地检查每个元素的父元素。这可能是非常昂贵的,这取决于页面上的元素数量和它们的嵌套深度,但这是如何做到的:

代码语言:javascript
运行
复制
var arr = [];
var len;
var i;
var nodes = document.querySelectorAll('body *');

function checkNode(node) {
    if (node.classList.contains('myHiddenElement')) {
        return true;        
    } else if (node.parentNode.nodeType === 1) {
        return checkNode(node.parentNode);
    }

    return false;
};

for (i = 0, len = nodes.length; i < len; i++) {
    if (checkNode(nodes[i])) {
        continue;
    } else {
        arr.push(nodes[i]);
    }
}

下面是一个JSFiddle示例:http://jsfiddle.net/xzCfs/5/

不幸的是,我不认为有一种方法可以用CSS选择器做到这一点,因为: not ()选择器只接受简单的选择器,而不接受复合的选择器(例如:not(.myHiddenClass *) <--如果它能工作的话就太棒了)。

票数 1
EN

Stack Overflow用户

发布于 2012-10-30 04:58:11

代码语言:javascript
运行
复制
document.querySelectorAll( '*:not(.myHiddenElement)' );

.querySelectorAllcss2 :not()选择器可以做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2012-10-30 05:03:49

尝尝这个

代码语言:javascript
运行
复制
​​var elems = document.body.childNodes;
var filtered = Array();  //holds elements that doesn't have 'myHiddenElement' class

​for(var i=0; i<elems.length; i++)
{
    if(elems[i].className != 'myHiddenElement')
      filtered.push(elems[i]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13129524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档