对所有人:对不起,如果我在StackOverflow上没有理解协议。我会立即努力纠正我在社区内的地位。话虽如此:
我正在尝试根据调用它来改变jQuery函数的上下文。在下面的代码中,当页面首次加载时,我们看到使用HTMLElementDiv作为当前上下文调用limitDates()函数。当我们通过输入输入字段来调用它时,我们看到它不是div,但是尝试使用$(this).closest('div')获取父div,返回HTMLElementInput,而不是div。有什么想法吗?
更新:创建了一个小提琴:http://jsfiddle.net/earachefl/XBFNQ/8/
<script type="text/javascript" src="common/js/jquery-1.5.2.min.js"></script>
<script type="text/javascript" src="common/js/jquery-ui-1.8.12.custom.min.js" ></script>
<div class="datemodule">
<input class="date_from" type="text" id="date_from_#name#" name="date_from" value=#start#>
</div>
<script>
$(document).ready(function(){
$('div.datemodule').limitDates();
$('.date_from').keydown(function(){
$(this).limitDates();
});
});
(function($){
$.fn.limitDates = function(){
return this.each(function(){
context = $(this).context;
//alert(context);
alert(context.nodeName);
if (context.nodeName != 'DIV'){
alert('not a div');
newContext = $(this).closest('div').context;
alert(newContext.nodeName);
}
});
};
})(jQuery);
</script>
答案 0 :(得分:2)
Context是传递给JQuery()的DOM元素。因此,您的选择器首先将上下文作为文档。
$('div.datemodule').limitDates(); // context is the document
$('.date_from').keydown(... // context is the document
当涉及回调时,如果你使用$(this)context是触发事件的元素。
$('.date_from').keydown(function(){
$(this).limitDates(); // context is the element which has class .date_form and triggered that event
});
当涉及到你使用this的函数时,每次迭代都会为每个元素设置上下文。
return this.each(function(){
$(this).context; // context is the element of iteration
}
正如我所说的那样,上下文是传递给JQuery的内容,可能它是readonly。
答案 1 :(得分:1)
上下文的描述是:
The DOM node context originally passed to jQuery();
因此,即使在致电closest
后,上下文仍然是传递给input
的原始jQuery
。
如果你想获得div
,为什么不得到它?
newContext = $(this).closest('div')[0];