gpt4 book ai didi

javascript - JS : Hide all elements except of one (by id) (and all of its descending child elements and its parents)

转载 作者:行者123 更新时间:2023-11-30 11:34:53 24 4
gpt4 key购买 nike

我尝试选择页面上的所有元素,除了#content_container 及其所有后代子元素及其所有父元素。稍后我想隐藏所有选中的元素。

但是我已经失败了:

var elems = document.querySelectorAll("body *:not(#content_container *)");

浏览器控制台(chrome)返回:无法在“Document”上执行“querySelectorAll”:“body *:not(#content_container *)”不是有效的选择器。

"body *:not(#content_container)" 不会返回错误。

如何做到这一点?注意:不能使用 jQuery。

编辑:你们中的一些人想要一个例子。目标是让#content_container 及其内容在网站上可见,而所有其他内容将被隐藏。

<body>
<div class="hide">
<div class="hide">

</div>
</div>
<div>
<div>
<div class="hide">
<div class="hide">

</div>
</div>
<div id="content_container">
<p> ------- content_container div ------- </p>
<div>
<div>
<div>

</div>
</div>
</div>
<div>

</div>
</div>
</div>
<div class="hide">

</div>
</div>
<div class="hide">
<div class="hide">
<div class="hide">
<div class="hide">

</div>
</div>
</div>
</div>
<div class="hide">
<div class="hide">

</div>
</div>

最佳答案

我能看到的唯一方法是获取主题节点,然后将其所有兄弟节点添加到“不显示”集合中,然后向上移动其父节点,收集并添加所有兄弟节点,停止在 body 上。

以下仅添加 sibling 和父 sibling ,而不是节点本身或其直接祖先,一旦处理完 body 子节点就停止。它还只收集元素节点并忽略所有其他元素节点,因此空的 #text 节点兄弟仍将存在,但不应影响布局。如果您想摆脱这些,只需删除它们即可。

单击“隐藏内容”按钮。

function hideStuff(){
var el = document.querySelector('#content_container');
var node, nodes = [];

do {
var parent = el.parentNode;

// Collect element children
for (var i=0, iLen=parent.childNodes.length; i<iLen; i++) {
node = parent.childNodes[i];

// Collect only sibling nodes that are elements and not the current element
if (node.nodeType == 1 && node != el) {
nodes.push(node);
}
}

// Go up to parent
el = parent;

// Stop when processed the body's child nodes
} while (el.tagName.toLowerCase() != 'body');

// Hide the collected nodes
nodes.forEach(function(node){
node.style.display = 'none';
});
}
<body>
<div class="hide">hide
<div class="hide">hide

</div>
</div>
<div>
<div>
<div class="hide">hide
<div class="hide">hide

</div>
</div>
<div id="content_container">
<p> ------- content_container div ------- </p>
<button onclick="hideStuff()">Hide stuff</button>
<div>don't hide
<div>don't hide
<div>don't hide

</div>
</div>
</div>
<div>don't hide

</div>
</div>
</div>
<div class="hide">hide

</div>
</div>
<div class="hide">hide
<div class="hide">hide
<div class="hide">hide
<div class="hide">hide

</div>
</div>
</div>
</div>
<div class="hide">hide
<div class="hide">hide

</div>
</div>
</body>

关于javascript - JS : Hide all elements except of one (by id) (and all of its descending child elements and its parents),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44876358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com