我正在阅读几本教程。这是其中一个链接:http://blog.jeremymartin.name/2008/02/building-your-first-jquery-plugin-that.html
其中,作者说,
你会注意到,每当我需要在插件中选择一个元素时,我总是使用obj作为我的上下文(例如,moreLink = $('。truncate_more_link',obj))。这是将任何选择约束到当前截断元素所必需的。如果不设置这样的上下文,您将得到不可预测的结果。
我在其他教程中读过类似的陈述,但我仍然没有理解它们的真正含义。在我看来,我理解......
$('.truncate_more_link', obj)
...表示“选择带有.truncate_more_link类的元素以及变量obj表示的元素。”
但听起来本教程的作者说“选择.truncate_more_link类元素也是传递给插件函数的实际元素。为什么不做呢
$(obj)
而不是
$('.truncate_more_link', obj)
我似乎缺少对范围的理解。
答案 0 :(得分:0)
当您将两个参数传递给jQuery时,第二个参数将用作第一个参数的“上下文”。简短版本:$('foo', bar)
表示与$(bar).find('foo')
完全相同。
选择器上下文
默认情况下,选择器在DOM中从文档根开始执行搜索。但是,通过使用
$()
函数的可选第二个参数,可以为搜索提供备用上下文。例如,要在事件处理程序中进行搜索,可以限制搜索:$('div.foo').click(function() { $('span', this).addClass('bar'); });
当搜索范围选择器仅限于
this
的上下文时,只有单击元素中的跨度才会获得附加类。在内部,选择器上下文使用
.find()
方法实现,因此$('span', this)
等同于$(this).find('span')
。