Javascript 无法选择除一个元素之外的所有元素

Javascript 无法选择除一个元素之外的所有元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我试图在函数中选择页面的所有元素,但一个除外: $('#sidebutton').click(function () { if (!$('.sidemenu').hasClass("current")) { prevScrolPos = $(window).scrollTop(); scrollTo = 0; } else { scrollTo = prevScrolPos; } $('.hidelem').toggleClass("hidden"); $('.sid

我试图在函数中选择页面的所有元素,但一个除外:

$('#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:(缺少完整的功能,但我希望您能理解)

问题是您可能正在跳过
.sideMenu
$(“body*:not(.sideMenu)”)
,但是您没有跳过它的父DIV。如果您隐藏了一个祖先,那么您也会隐藏它的所有后代。您也不会跳过任何子体,因此
.sidemenu
的子项也会隐藏

因此,您需要使用
:not:(has())
排除作为.sidemenu祖先的任何内容,然后排除sidemenu本身,然后排除sidemenu的任何子项:

$("#container :not(:has(.sidemenu)):not(.sidemenu):not('.sidemenu *')").toggleClass("hidden");
JSFiddle:

不过,您确实应该将隐藏/显示指向更具体的内容。也许在你想要隐藏的东西周围放一个包装袋?我为演示添加了一个

说了这么多,你的选择过程相当复杂。您最好只需将一个类添加到所有要切换的内容中,然后切换这些内容(您已经在divs上设置了
nodisplay
,所以我现在就使用它)

e、 g.仅此而已:

$(".nodisplay").toggleClass("hidden");

jsiddle:

为什么在那里使用
&&
操作符<代码>$('.sidemenu')。toggleClass(“当前”)返回一个jQuery集合(一个对象),对象在JavaScript中被认为是真实的,第二个表达式被执行。如果将类添加到body中,并将其设置为
display:none
visibility:hidden
,则整个页面将消失<代码>$(“*:非(.sidemenu)”)将包括
正文
html
标记。建议您在jsfiddle.net中创建一个演示,并指出您想要什么。另外,您的
prevScrolPos
变量没有在
else
条件中设置,仅针对您的
if
条件。Vohuman,您的问题的答案是“因为我对JS一无所知”。谢谢你提供的信息,我会记住的。Gary,这个函数的主要部分是由stackoverflow的一位好心的用户为我创建的。我自己也不知道实施这件事的最佳方式是什么。你能确切地告诉我我应该改变什么吗?