如何将JQuery函数应用于除某些元素之外的所有元素?

时间:2010-10-19 10:49:22

标签: jquery jquery-selectors

我有点坚持这个。我有webapp,我使用简单的JQuery插件:

$.extend($.fn.disableTextSelect = function() {
    return this.each(function(){
        if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
        }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
        }else if ($.browser.webkit) { // chrome, webkit
          $(this).css('webkitUserSelect','none');
          this.onselectstart = function () { return false; };
        }else{//Opera, etc.
            $(this).mousedown(function(){return false;});
        }
    });
});

此插件通常会禁用所有浏览器上的鼠标文本选择。我在#desktop元素上调用它,它基本上是主要的包装器:

$('#desktop').disableTextSelect();

我使用它,因为它禁用鼠标文本选择#desktop内的所有元素。但是,#desktop中有一些元素,我希望它们具有正常的文本选择行为。是否有一些简单的方法来实现代码,这会使全局规则异常?

2 个答案:

答案 0 :(得分:4)

JQuery支持not()选择器(here)。您可以使用您希望具有正常行为的那些元素的区别特征,作为not()选择器的参数

答案 1 :(得分:1)

最简单的方法是在开始主逻辑之前做一些过滤。

$.extend($.fn.disableTextSelect = function() {
    return this.each(function(){
        if ($(this).parents('#excludedItems').length) { //or any other logic here
            return true; //move to the next item
        }

        if($.browser.mozilla){//Firefox
            $(this).css('MozUserSelect','none');
        }else if($.browser.msie){//IE
            $(this).bind('selectstart',function(){return false;});
        }else if ($.browser.webkit) { // chrome, webkit
          $(this).css('webkitUserSelect','none');
          this.onselectstart = function () { return false; };
        }else{//Opera, etc.
            $(this).mousedown(function(){return false;});
        }
    });
});