3

jQuery 当前使用window它作为它的默认元素,所以任何类似$('div')的调用都会divwindow.

有什么方法可以更改 jQuery 的默认值,例如:

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

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

提前致谢


更新

只是一个更新在这里更细化了这个问题:

我想根据来自外部脚本的外部查询执行上述操作,外部脚本不知道是什么defaultRoot所以他们仍然可以调用应该是当前基础的内容,所以在这种情况下,我害怕添加 a不幸的是,第二个参数不是一个选项。

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

4

4 回答 4

3

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

$.defaultRoot.find("div");

否则,您可以使用设置上下文的 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")

如果出于某种原因你真的想搞砸客户端代码的默认状态(乞求混乱 IMO),你应该看看功能实践:currying。

于 2012-09-28T11:08:30.763 回答
0

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

$.defaultRoot = $('.anyOtherRootElement');
$('div', $.defaultRoot ).text("Hello"); // all div inside $('.anyOtherRootElement')
$('div' ).text("Hello"); //all div inside body tag
于 2012-09-28T11:07:26.970 回答
0

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

于 2012-09-28T11:10:05.883 回答
0
$('SELECTOR', 'CONTEXT')

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

更多详情,请访问http://api.jquery.com/jQuery/

于 2012-09-28T11:06:32.483 回答