强制jQuery将其范围限制为某个div

时间:2016-07-06 16:50:26

标签: jquery scope

有没有办法将$替换为$_sub,其行为包含在div中?例如,我想将$_sub注入函数,而不是使用$,该函数使用$_sub来限制div范围,同时保留可以使用的方法在$上被召唤(例如,我应该可以$_sub.ajax()

<a href="#">Outside </a>
<div id="contents" >
    <a href="#">Inside </a>
</div>

function modify($_sub) {
    var inner_a = $_sub("a"); //should return only the inner <a>
}
在这种情况下,

context对我不起作用。我希望函数认为$_sub就像$一样。我可以更改函数签名以将$_sub重命名为$,以便该函数甚至不知道它正在使用范围限制版本的实际$

2 个答案:

答案 0 :(得分:2)

使用contextjQuery( selector [, context ] )

只需传递第二个参数。

在您的示例中,它将是: var inner_a = $("a", "#contents"),相当于$("#contents").find("a")

What is "context" in jQuery selector?

答案 1 :(得分:0)

其他答案中提到的上下文选项看起来更加清晰,但是如果你真的不能使用它,你可以改为一个函数来自动提供上下文,然后将curried函数传递给你的修改函数:

&#13;
&#13;
var curry = function() {
  var args = Array.prototype.slice.call(arguments);
  var fn   = args[0];
  var after = args.slice(1);

  return function() {
    return fn.apply(this, after.concat(
      Array.prototype.slice.call(arguments)));
  };
};    

var _$_sub = function(context, sel) {
  return $(context).find(sel);
}

var $_sub = curry(_$_sub, '#content');

function modify($$) {
  var inner_a = $$("a");
  console.log(inner_a.text());
}

modify($_sub);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="">Outside</a>
<div id="content">
  <a href="">Inside</a>
</div>
&#13;
&#13;
&#13;