快捷方式将jQuery限制为特定DOM节点

时间:2012-10-15 09:57:55

标签: javascript jquery dom namespaces

我想将jQuery限制为特定的命名空间或DOM节点。目前我所做的就是在每一行都喜欢这个

$('a' , $node).addClass();
$('li' , $node).removeAttr();
$('div#q' , $node).hide();

等等..是否有任何我可以指定的快捷方式/方法,之后jQuery对象的范围将限制为$node

4 个答案:

答案 0 :(得分:2)

您可以直接更改$方法。

将$分配给返回$ node.find()的函数,然后你就完成了。

    jQuery(function($){
        var $node = $('div');
        var _$ = $;

        $ = function(selector){
            return $node.find(selector);
        };

        $('p:first').fadeOut();

        // Return $ to its previous owner
        $ = _$;
    });

jsfiddle:http://jsfiddle.net/pmYRw/1/

答案 1 :(得分:1)

您可以链接您的方法,这样您只需编写一次选择器:

$('a' , $node).addClass('aclass').removeAttr('rel').hide();

或者将引用保存在变量中以便重复使用:

var a = $('a' , $node);
a.addClass('aclass');
a.removeAttr('rel');
a.hide();

答案 2 :(得分:0)

而不是$ node(我假设它是一个已经实例化的jquery对象),你可以把它写成一个字符串:

$('a', '#main') #≠> all anchor tags under element with main as id

$('a', '#main li') #≠> all anchor tags al li's under element with main as id

您还可以先实例化主元素,然后在其子范围内搜索:

var main = $('#main');
main.find('a');
main.find('li a');

这将更加高效。

答案 3 :(得分:0)

$('a' , $node).addClass();
$('a' , $node).removeAttr();
$('a' , $node).hide();

而不是连接$('a',$ node)几次你可以缓存这个变量并使用它如下所示。这也会改善您的表现。

var node  = $('a' , $node);
node.addClass();
node.removeAttr();
node.hide();

我们可以通过链接它们来改进这些代码,如下所示

var node  = $('a' , $node);
node.addClass().removeAttr().hide();

重用变量和链接jquery将对您的代码产生巨大影响。