我想将jQuery限制为特定的命名空间或DOM节点。目前我所做的就是在每一行都喜欢这个
$('a' , $node).addClass();
$('li' , $node).removeAttr();
$('div#q' , $node).hide();
等等..是否有任何我可以指定的快捷方式/方法,之后jQuery对象的范围将限制为$node
。
答案 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将对您的代码产生巨大影响。