有没有办法将$
替换为$_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
重命名为$
,以便该函数甚至不知道它正在使用范围限制版本的实际$
。
答案 0 :(得分:2)
使用context:jQuery( selector [, context ] )
只需传递第二个参数。
在您的示例中,它将是:
var inner_a = $("a", "#contents")
,相当于$("#contents").find("a")
答案 1 :(得分:0)
其他答案中提到的上下文选项看起来更加清晰,但是如果你真的不能使用它,你可以改为一个函数来自动提供上下文,然后将curried函数传递给你的修改函数:
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;