使用jQuery选择所有元素,除了一个特定的div及其子元素

10

我有这段html/css代码:

<body>
        <!-- BEGIN: HEADER AREA -->
        <?php require("snippets/header_area.php"); ?>
        <!-- END: HEADER AREA -->
        <div id = "presentation_area">
            <div id = "submenu_area">
                <div id = "sliding_menu_area">
                </div>
                <div id = "tags">
                    <div id = "1">
                        <img src = "lang/el/images/1.png" />
                    </div>
                    <div id = "2">
                        <img src = "lang/el/images/2.png" />
                    </div>
                    <div id = "3">
                        <img src = "lang/el/images/3.png" />
                    </div>
                    <div id = "4">
                        <img src = "lang/el/images/4.png" />
                    </div>
                </div>
            </div>
        </div>
    </body>

我想在用户点击除了#sub_menu_area之外的其他地方时触发一个函数。我使用以下JavaScript代码:

$('*').not('#submenu_area').click(function(){
        if(slide == "open"){
            $('#sliding_menu_area').toggle(effect);
            slide = "close";
        }
    });

很遗憾,子元素们不知何故没有被排除,在点击时会反复切换许多次。有人知道如何正确地做吗?! :)

编辑: 所以我需要一个jquery选择器来正确地获取:在body的所有元素上点击,但#submenu_area及其后代除外。


你能操作 $(this) 上的开关吗?这符合你想要完成的核心吗? - veeTrain
不,因为我想要类似于“除了这个及其子元素之外的所有内容”。你有使用$(this)的工作示例吗? - Dimitris Damilos
抱歉,我可能不太明白您所看到的情况,也不想发生。我知道您希望切换的效果比您想要的更多,但如果您能创建一个jsfiddle.net,那将有助于具体显示行为。我原以为您想要切换点击的内容,但听起来您是想在4个图像上看到没有效果,因为它们是submenu_area的后代,对吗? - veeTrain
我想要一个选择器来表示: 在点击body的所有元素时,排除#submenu_area及其子元素 这就是我想做的。 - Dimitris Damilos
2个回答

17

试试这个:

$(document).click(function(e) {
        if ($(e.target).is('#submenu_area, #submenu_area *')) {
            return;
        }
        if(slide == "open"){
            $('#sliding_menu_area').toggle(effect);
            slide = "close";
        }
    });

干得好,这真是个挑战。很高兴你得到了答案,@Jonur。 - veeTrain

6

使用以下代码:

$('*').not("#submenu_area *").click(function() { ... });

方括号不仅用于属性吗?我尝试了你的建议,但它没有起作用... - Dimitris Damilos
它可能是$('* :not(#submenu_area)'),但这个想法无论如何都不能满足OP的要求。 - thirtydot
哎呀,没错(已修复)。那这个为什么不能满足原帖作者的需求呢? - Elliot Bonneville
2
这个仅仅排除了#submenu_area。它并没有排除任何后代(“子元素”)。 - thirtydot
@Jonur:抱歉,现在无法提供更多帮助,我正在工作。OP是什么我不太确定,但它指的是提问者。 :-) - Elliot Bonneville
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接