如何实现jQuery的.not()?

Aak*_*thy 0 javascript css-selectors

我的代码如下:

document.onmousedown = function(){
    alert('test');
}
Run Code Online (Sandbox Code Playgroud)

现在,除了ID为"box"的元素之外,单击应该调用此函数,即jQuery的.not()选择器的等价物.

jQuery代码将是:

$(document).not('#box').mousedown(function(){
     alert('test');
});
Run Code Online (Sandbox Code Playgroud)

如何在不使用jQuery的情况下实现相同的功能?

编辑:我不想要jQuery代码,但我想要一个类似于.not()Javascript中的jQuery选择器的动作.

编辑:我正在制作一个类似addthis的小部件.这是一个10kb的文件,在选择文本时会显示弹出窗口.它不会使用jQuery.

在我的例子中,当选择文本时,会显示一个弹出窗口.在窗口小部件以外的某处单击文档时,窗口小部件应该消失.

SLa*_*aks 5

要正确地执行此操作,您需要检查e.target || e.srcElement其父母是否或任何父母id === 'box'.

例如:(使用jQuery)

$(document).mousedown(function(e) {
    if ($(e.target).closest('#box').length)
        return;

    //Do things
});
Run Code Online (Sandbox Code Playgroud)

没有jQuery:

function isBox(elem) {
    return elem != null && (elem.id === 'box' || isBox(elem.parentNode));
}
document.onmousedown = function(e) {
    e = e || window.event;
    if (isBox(e.target || e.srcElement))
        return;
    //Do things
};
Run Code Online (Sandbox Code Playgroud)

或者,您可以处理元素的mousedown事件box并取消冒泡.