Javascript 在jquery中设置默认根元素

Javascript 在jquery中设置默认根元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,jQuery当前使用window作为其默认元素,因此任何像$('div')这样的调用都会在window中查找div标记 是否有任何方法可以更改jQuery的默认值,如: $.defaultRoot = $('.anyOtherRootElement'); $('div').text("Hello"); 这将选择包含.anyOtherRootElement类的元素中的任何div 提前谢谢 竖立 这里只是更新一下,将问题进一步细化: 我想基于来自外部脚本的外部查询执行上面的操

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

是否有任何方法可以更改jQuery的默认值,如:

$.defaultRoot = $('.anyOtherRootElement');
$('div').text("Hello");
这将选择包含
.anyOtherRootElement
类的元素中的任何div

提前谢谢


竖立 这里只是更新一下,将问题进一步细化:

我想基于来自外部脚本的外部查询执行上面的操作,外部脚本不知道什么是
defaultRoot
,因此它们仍然可以调用应该是当前基的内容,因此在本例中,很遗憾,添加第二个参数恐怕不是一个选项

同时,创建一个返回defaultRoot.find(el)的
函数将阻止我使用一级方法,例如
$.trim
$。each
,等等……不幸的是,这也不可能

$('SELECTOR', 'CONTEXT')
您可以使用上下文。与您的案例一样,
$('div','anyOtherRootElement')


有关更多详细信息,请访问

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

$.defaultRoot = $('.anyOtherRootElement');
$('div', $.defaultRoot ).text("Hello"); // all div inside $('.anyOtherRootElement')
$('div' ).text("Hello"); //all div inside body tag
理想情况下(出于性能原因),您应该使用
find()

否则,可以使用设置上下文的2参数形式

   $("div", $.defaultRoot);
一般来说,您不希望隐式地执行这些类型的操作,因为当以后不得不使用您的代码时,其他人很容易会完全困惑。如果您希望始终如一地执行此操作并缩短它,您应该创建自己的函数,如:

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")

如果出于某种原因,您真的想改变客户机代码的默认状态(乞求混乱),那么您应该看看函数实践:currying。

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

为什么函数会阻止您访问方法?它仍然返回一个jQuery包装,jQuery对象仍然会被暴露?嘿,Matt,我想这是因为需要在
$
下运行它们,而不是
$s
或任何其他名称,但是$仍然可以用于实用工具
$。(name)
函数,而$s的返回将提供任何包装
$。fn.(name)
功能。你可以修改它,使$s也可以用于实用函数,但在这种情况下,jQuery实际上只是“静态”y方法的名称空间,因此没有真正的好处,但会有更大的复杂性。哦,我明白你的意思了,这现在更有意义了……感谢你的解决方案
var withScope = function(scope$) {
  return function(selector) {
    return scope$.find(selector);
  }
}

var $s = withScope($.defaultRoot);
$s("div")