Jquery 隐藏除一个div及其子元素之外的所有元素
如何使用jquery隐藏除一个div及其子元素之外的所有元素?忽略这一点,似乎没有达到预期效果 也许是以下几点Jquery 隐藏除一个div及其子元素之外的所有元素,jquery,hide,Jquery,Hide,如何使用jquery隐藏除一个div及其子元素之外的所有元素?忽略这一点,似乎没有达到预期效果 也许是以下几点 $('body').children().hide(); $('#mydiv').children().andSelf().show(); 更新 问题是,子DIV的可见状态通常依赖于它的父级是否可见。所以你需要有一个完整的树,一直到你想要保持可见的DIV 您需要隐藏除该树之外的所有内容,诀窍是识别DOM结构中不在DIV祖先中的所有子级,以及不在DIV祖先中的所有子级 终于 设法写了
$('body').children().hide();
$('#mydiv').children().andSelf().show();
更新
问题是,子DIV的可见状态通常依赖于它的父级是否可见。所以你需要有一个完整的树,一直到你想要保持可见的DIV
您需要隐藏除该树之外的所有内容,诀窍是识别DOM结构中不在DIV祖先中的所有子级,以及不在DIV祖先中的所有子级
终于强>
设法写了一个解决方案。起初尝试了递归方法,但在复杂的页面上,它因“太多递归”而消亡,所以编写了一个基于列表的版本,效果很好。它以单功能jQuery插件的形式出现,因为这似乎是最有用的方法
(function($) {
$.fn.allBut = function(context) {
var target = this;
var otherList = $();
var processList = $(context || 'body').children();
while (processList.size() > 0) {
var cElem = processList.first();
processList = processList.slice(1);
if (cElem.filter(target).size() != target.size()) {
if (cElem.has(target).size() > 0) {
processList = processList.add(cElem.children());
} else {
otherList = otherList.add(cElem);
}
}
}
return otherList;
}
})(jQuery);
此例程查找上下文
(默认为
)中排除对象及其祖先的所有元素
这将实现问题的结果:
$('#mydiv').allBut().hide();
另一个用途是将容器中的所有对象保留在某个类中,从而淡出所有其他对象:
$('.keep').allBut('#container').fadeOut();
请记住,任何给定元素的布局和定位都可能严重依赖于周围的元素,因此隐藏类似的内容可能会改变布局,除非这些内容是绝对定位的。不管怎样,我都能看出这套程序的用处
然而强>
另一张海报提出了以下内容,它使用jQuery中内置的例程返回相同的信息,我以前没有见过这个例程
target.add(target.parentsUntil(context)).siblings();
或者没有变量
这是一个稍微简单一点,必须在未来的文件
PS.如果有人有比a.filter(b).size()更好的方法来检查给定的jQuery对象是否与另一个对象等效b、 size()
我很高兴听到这个消息 这将执行$(“.mydivclass”)。而不是(This.hide()代码>
mydivclass
是指定给所有需要隐藏的div的类
更新:
$(".mydivclass").children().hide();
将隐藏中的所有子元素。mydivclass
要以嵌套元素为目标并确保它是唯一显示的元素,您需要隐藏它的同级元素以及它的所有祖先的同级元素,直到
示例:
编辑:我在上面添加的解决方案更加简洁
示例:
简单的解决方案:隐藏全部,然后显示一个(在本例中是第二个div及其子级)
这将取决于目标
在HTML标记中的位置。也许,更详细一点的问题将有助于回答这个问题?嗯,一定是那种特殊情况。一般来说,这并不是万无一失的。可能是因为#mydiv
是body
的直系后代。如果是这样的话,您可以将其缩短为$('body>:not(#mydiv)).hide()代码>。我添加了一个适用于嵌套元素的答案。@patrick我在我的答案之后添加了你的答案,这样任何阅读它的人都不会跳下来尝试它!也许人们很高兴看到代码演示了所涉及的方法。LOL,您的代码生成的输出与上面我万能的代码块相同,不知道.parentsUntil()
@Orbling-有时一种方法会带来世界上所有的不同o) 我只是通过使用简化了我的设置。如果mydivclass
没有提到只有一个maindiv
以及一些元素和其他div,那么@user113716在('body')与parents()相同之前不是parents?+1这需要进一步修改。。“那怎么隐藏呢?”拉菲,我有点困惑。。。你能再解释一下吗?你想隐藏maindiv
中的所有子元素,而这个maindiv
有一些text
和其他输入字段以及一些其他div。@Mattis显然这行不通:如果你隐藏.mydivclass的父级,那么.mydivclass也会被隐藏。。。
$(".mydivclass").children().hide();
$('#target').show().parentsUntil('body').andSelf().siblings().hide();
var target = $('#target').show();
target = target.add(target.parentsUntil('body')).siblings().hide();
$('.create-account').children().hide();
$('.create-account>div:nth-of-type(2)').show();