javascript – 我可以为jQuery提供默认的“上下文”吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 我可以为jQuery提供默认的“上下文”吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2332字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 我可以为jQuery提供默认的“上下文”吗?](/upload/InfoBanner/zyjiaocheng/816/f564001b1a5a49b3831469291db74846.jpg)
背景:
可以提供jQuery选择器调用的第二个“context”参数(例如:jQuery(selector,context)),以便为选择器引擎提供从中下降的起点.
如果您需要控制IFRAME中的内容(在同一个域中),这通常很有用.您只需将iframe.contentWindow.document作为“context”参数传递.
如果在使用jQuery的IFRAME中加载了任何JavaScript代码,并且从外部窗口的范围内调用,则该代码中对$或jQuery的任何引用实际上都是来自外部窗口的jQuery实例.
当IFRAME中的JavaScript代码(比如Bootstrap.js)执行类似$(document)的操作时(或者没有“context”参数的其他选择器),问题就来了.当从外部窗口调用该代码(在iframe中定义)时,文档引用外部窗口中的HTMLDocument元素 – 这通常不是期望的结果.
题:
能够创建一个具有默认“上下文”参数的jQuery的词法范围副本/包装将是非常有用的,由任何人创建它.
例:
// jQuery already exists out here
var iframe = document.createElement('IFRAME');
iframe.addEventListener('DOMContentLoaded', function(){
// code in here can already refer to $for 'outer' jQuery
// code in here can refer to $local for 'inner' jQuery by virtue of...
var $local = jQueryWithContext($, iframe.contentWindow.document);
// code loaded with IFRAME will use $local by virtue of ...
iframe.contentWindow.jQuery = iframe.contentWindow.$= $local;
});
iframe.src = '/path/to/iframe/content.html';
问题是,是否可以在上面编写类似jQueryWithContext的内容?
为什么?
有时您希望隔离第三方HTML组件(从安全角度来看,您相信它们)从CSS / JavaScript污染角度来看是错误的.
Bootstrap.js就是一个很好的例子.它调用$(document)一点点,并进行其他类似的无上下文选择器调用.如果jQuery可以按照我描述的方式重新定义,那么这个“非最佳”编写的库可以很容易地被隔离.
另外,从两个帧中使用相同的$.data(el,…)集合会非常有用,如果没有一些上下文管理,这是非常棘手的.
解决方法:
实际上,它会很简单:
function jQueryWithContext( selector, context ) {
// I added the possibility to overwrite the context here, but you could delete
return $( selector, context || iframe.contentWindow.document );
}
jQueryWithContext( '#main' ).show();
但要强迫它插件,你可能需要这样:
jQuery.noConflict(); // keep the real jQuery for now
$= function( selector, context ){
return new jQuery.fn.init( selector, context || iframe.contentWindow.document );
};
$.fn = $.prototype = jQuery.fn;
jQuery.extend( $, jQuery ); // copy static method
// Then override default jQuery
jQuery = $;
这有点工作,但它可能打破$()的一些用法(也许现在不行,但它可能在未来的jQuery版本中,或任何时候上下文参数的存在打破正常行为).
内容总结
以上是互联网集市为您收集整理的javascript – 我可以为jQuery提供默认的“上下文”吗?全部内容,希望文章能够帮你解决javascript – 我可以为jQuery提供默认的“上下文”吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。