在jquery中设置默认根元素

jQuery当前使用window作为其默认元素,因此任何像$('div')这样的调用都会在window内查找div标签。

有没有办法改变jQuery的默认值,如:

 $.defaultRoot = $('.anyOtherRootElement'); $('div').text("Hello"); 

这将选择包含.anyOtherRootElement类的元素中的任何div。

提前致谢


Upate

只是一个更新,在这里更多地提炼问题:

我想基于来自外部脚本的外部查询来执行上面的操作,这些外部脚本不知道defaultRoot是什么,所以他们仍然可以调用应该是当前的基础,所以在这个例子中,我害怕添加不幸的是,第二个参数不是一个选项。

同时创建一个返回defaultRoot.find(el)function会阻止我使用诸如$.trim$.each等的第一级方法……所以不幸的是,这也是不可能的。

理想情况下(出于性能原因)你想使用find()

 $.defaultRoot.find("div"); 

否则,您可以使用设置上下文的2参数表单

  $("div", $.defaultRoot); 

一般而言,您不希望隐式执行这些类型的事情,因为其他人在以后必须使用您的代码时可能很容易混淆。 如果你想要一贯地做它并缩短它,你应该创建自己的function,如:

 var $s = function(selector) { return $.defaultRoot.find(selector); } 

然后你就可以使用了

 $s("div") 

或者你也可以用类似的东西做一个范围更高阶的函数

 var withScope = function(scope$) { return function(selector) { return scope$.find(selector); } } var $s = withScope($.defaultRoot); $s("div") 

如果由于某种原因你真的想要使用默认的客户端代码状态(请求混乱IMO),你应该看看function实践:currying。

 $('SELECTOR', 'CONTEXT') 

您可以使用上下文。 在你的情况下$('div', '.anyOtherRootElement')

有关更多详细信息,请访问http://api.jquery.com/jQuery/

鉴于您可以将上下文作为第二个参数传递,您可以使用jQuery.noConflict();内部调用JQuery的版本轻松覆盖Javascript中的$()运算符jQuery.noConflict(); 并始终将您的新根作为第二个参数传递。

我不认为jQuery提供这样的方法或变量。 但是你可以在jQuery方法中传递第二个参数来设置上下文。

 $.defaultRoot = $('.anyOtherRootElement'); $('div', $.defaultRoot ).text("Hello"); // all div inside $('.anyOtherRootElement') $('div' ).text("Hello"); //all div inside body tag