1

我似乎还有另一个我没有解决的问题。真正简单的前提。我有一个 mousedown 事件,基本上如果单击页面上的一个特定元素,我不想发生任何事情,否则我想要 hide() 一些 div。

    $(function(){
        $("document :not(#_ignorelement)").mousedown(function(event){
                if($('#_hidethiselement').length){
                    $('#_hidethiselement').hide();
                }
        })
     })

那根本行不通。我还尝试了以下方法:

    $(document).not($("#_ignorelement")).mousedown(function(event){

    $(document).not("_ignorelement").mousedown(function(event){

如果我能解决这个问题,很好奇我实际上如何让 ":not" 包含父 div,如下所示:

$().not("_ignoreelement").parent().closest('div').mousedown(function

因为元素“_ignorelement”是一个 div 中的锚标记。想知道我如何使用父 div,而不是锚标记。

无论如何,任何帮助将不胜感激。

4

2 回答 2

2

document不是您可以选择的节点。试试这个:

$(function(){
    $("body :not(#_ignorelement)").mousedown(function(event){
        if($('#_hidethiselement').length){
            $('#_hidethiselement').hide();
        }
        return false;
    })
 });

这是一个工作示例

于 2012-06-05T22:23:53.443 回答
1

这应该有效:

var ignoreNode = jQuery('#_ignorelement')[0];

jQuery(document).on('mousedown', function(e) {
  if (ignoreNode === e.target || jQuery.contains(ignoreNode, e.target)) {
    // If the target is, or is inside the ignoreNode, don't
    // do anything.
    return;
  }

  // Do your hiding handling here 
});

请注意,缓存您的 jQuery 对象确实是一个好主意,这样您就不会在每个事件上运行选择器查询!

于 2012-06-05T22:38:03.333 回答