我试图在一个函数中选择除一个页面之外的所有页面元素:
$('#sidebutton').click(function () {
if (!$('.sidemenu').hasClass("current")) {
prevScrolPos = $(window).scrollTop();
scrollTo = 0;
} else {
scrollTo = prevScrolPos;
}
$('.hidelem').toggleClass("hidden");
$('.sidemenu').toggleClass("current");
$('html,body').scrollTop(scrollTo);
});
当我使用一个简单的类选择器(.hidelem)时,它可以工作,但是当我使用一些更复杂的东西时(例如,$("*:not(.sidemenu)").toggleClass("hidden");
或$("*").not(".sidemenu").toggleClass("hidden");
)则不行;这些只是导致一个空白的窗口。
你能告诉我我在这里缺少什么吗?
JSFiddle:https://jsfiddle.net/et978wjw/5/(缺少完整功能,但我希望你明白这一点)
答案 0 :(得分:0)
问题是您可能正在使用.sideMenu
跳过$("body *:not(.sidemenu)")
,但您没有跳过其父DIV。如果你隐藏了一个祖先,你也隐藏了它的所有后代。您也不会跳过任何后代,因此.sidemenu
的孩子也会隐藏
所以你需要用:not:(has())
排除任何作为.sidemenu祖先的东西,然后排除sidemenu本身,然后排除任何sidemenu的孩子:
$("#container :not(:has(.sidemenu)):not(.sidemenu):not('.sidemenu *')").toggleClass("hidden");
JSFiddle: https://jsfiddle.net/TrueBlueAussie/et978wjw/8/
你真的应该将hide / show指向更具体的东西。也许你想隐藏的一切包装div?我为演示添加了一个。
现在说了这么多,你的选择过程非常复杂。你最好只是在你要切换的所有东西上添加一个类,然后切换那些(你已经在div上有nodisplay
,所以我现在就用它了。)
e.g。就是这样:
$(".nodisplay").toggleClass("hidden");