在jquery中设置默认根元素

时间:2012-09-28 11:04:06

标签: javascript jquery jquery-selectors

jQuery目前使用window作为其默认元素,因此$('div')之类的任何调用都会在div内查找window个标记。

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

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

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

提前致谢


Upate

这里只是更新一点问题:

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

同时创建一个返回function的{​​{1}}会阻止我使用诸如defaultRoot.find(el)$.trim之类的第一级方法......所以很遗憾也不可能。

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

$('SELECTOR', 'CONTEXT')

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

一样

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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