可以执行以下操作:
$(selector, context)
但$.fn.pluginX
如何找出给定的上下文是什么?例如:
$(selector, context).pluginX()
我的情况是第三方插件假定窗口/文档是当前的。
我假设文档是由" context"表示的,但它并不总是我猜的文档。在我的情况下,我正在处理像$(sel, iframe.contentDocument).pluginX()
这样的跨文档内容,我想确保如果插件执行$('body').append
,那么它应该$('body', theSameDocumentContext).append
。希望有所帮助。
答案 0 :(得分:1)
jQuery元素具有.context
属性。您可以在插件中使用它:
$.fn.pluginX = function(){
console.log(this.context);
}
但这不可靠,变种太多了。上下文的值始终为document
,除非您传递HTMLElement
(就像那样):
$('p', document.getElementsByTagName('div')[0]);
但你可以传递不同的背景:
//All working :
$('p', document.getElementsByTagName('div'));
$('p', document.querySelector('div'));
$('p', document.querySelectorAll('div'));
$('p', document.getElementByID('id'));
$('p', 'div');
$('p', $('div'));
$('p', $('div').add('p'));
///... ran out of ideas
现在,重要的是要知道传递上下文是exactly the same has doing .find()
:
$('p', 'div') === $('div').find('p');
此外,jQuery总是在链接时存储以前的jQuery对象。如果是初始调用(不使用遍历方法),则前一个对象将是文档。
了解这些信息,如果您想获得“真实”上下文,您可以获得最后一个元素。 jQuery具有属性.prevObject
。使用它:
$.fn.pluginX = function(){
console.log(this.prevObject);
}
答案 1 :(得分:0)
$(选择器,上下文)与$('上下文选择器')相同,你可以通过this.selector获取它,但是对于链式选择器来说这可能很棘手。
例如:
$('.articles', '.section').pluginX()
//within the pluginX plugin function definition you can call this.selector
$.fn.pluginX = function(){
...
//this.selector = '.section .articles';
//this.selector.split(' ')[0] = '.section' //scope
...
}
但如果我们有
,上述计算将失败$('.articles .writer', '.section').pluginX();
或
$('.writer', '.section .articles').pluginX();
如果您对选择器或上下文有一些假设,那么它可以帮助您起草逻辑。让我知道这可以帮助您,或者您可以详细说明您的具体要求,我们可以尝试找到解决方案。