Javascript 如何从插件内部访问查询中给定的上下文?
可以执行以下操作:Javascript 如何从插件内部访问查询中给定的上下文?,javascript,jquery,iframe,plugins,jquery-plugins,Javascript,Jquery,Iframe,Plugins,Jquery Plugins,可以执行以下操作: $(selector, context) 但是$.fn.pluginX如何找出给定的上下文是什么?例如: $(selector, context).pluginX() $('.articles', '.section').pluginX() //within the pluginX plugin function definition you can call this.selector $.fn.pluginX = function(){ ... /
$(selector, context)
但是$.fn.pluginX
如何找出给定的上下文是什么?例如:
$(selector, context).pluginX()
$('.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
...
}
我有一个例子,第三方插件假定窗口/文档是当前窗口/文档
编辑:
我假设文档的意思是“上下文”,但我猜它并不总是文档。在我的例子中,我正在做跨文档的事情,比如
$(sel,iframe.contentDocument).pluginX()
,我想确保如果插件做$('body').append
,那么它应该做$('body',sameDocumentContext.).append
。希望有帮助。jQuery元素有一个.context
属性。您可以在插件中使用它:
$.fn.pluginX = function(){
console.log(this.context);
}
但这是不可靠的,有太多的变种。上下文的值将始终为document
,除非您传递HTMLElement
(如下所示):
但您可以传递不同的上下文:
//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
现在,重要的是要知道传递上下文是:
此外,在链接时,jQuery始终存储以前的jQuery对象。如果是初始调用(未使用遍历方法),则前一个对象将是文档
知道了这些信息,如果你想得到“真实”的上下文,你可以得到最后一个元素。jQuery具有属性.prevObject
。使用它:
$.fn.pluginX = function(){
console.log(this.prevObject);
}
$(selector,context)与$('context selector')相同,您可以通过这个.selector获得它,但是对于链式选择器来说,这可能很棘手
例如:
$(selector, context).pluginX()
$('.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();
或
如果您对选择器或上下文有一些假设,那么它可能会帮助您起草逻辑。让我知道这对您有帮助,或者您可以详细说明您的具体要求,我们可以尝试找到解决方案 不要检查上下文,检查
.prevObject
@Karl AndréGagnon你能进一步解释吗?看我的答案。希望能有帮助。你为什么需要上下文?可能有一种更好的方法,不需要以这种方式检索上下文。@AdamLynch跨文档是否附加了自己版本的jQuery?如果他们这样做了,那么解决方案可能非常简单,只需获得对该jQuery实例对象的引用,而不是根对象的引用。使用jQuery跨文档工作可能会很困难,例如,事件冒泡并不总是像预期的那样工作。无论如何,this.prevObject.get(0)。ownerDocument
将完成此工作(或者this.prevObject.get(0)
,如果它已经是一个文档。
$('.writer', '.section .articles').pluginX();