子页面引用父页面的jQuery时使用字符串选择符的问题
1,如果有父子两个页面,一个是顶端页面,一个是iframe中的页面。
有时候我们希望从子页中引用父页中的函数,通常可以这样来引用:window.top.myFunctionName.
正常情况下这是没问题的,比如父页中有一个
function sayHello(name){ alert("good day "+name); }
IFrame子页中就可以这样使用:
var sayHello=window.top.sayHello; sayHello("wzy");
2,如果是jQuery呢,比如我们父页中引入了jquery.js,iFrame子页中不想重复引用,
我们可能希望能通过如下代码来使用jQuery
var $ = window.top.jQuery; $("#mybutton").click( function(){alert('hi');} );
事实上这样是不行的。通过研究jquery.js的源码,我们发现了如下代码:
(function( window, undefined ) { var //。。。。这里省略了很多, document = window.document; //....这里省略了很多。 jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { //。。。。这里省略了很多 if ( typeof selector === "string" ) //。。。。这里省略了很多 elem = document.getElementById( match[2] ); //。。。。这里省略了很多 } //。。。。这里省略了很多 )(window);
看明白了吗
引用jquery.js时,执行了一个自执行函数,把当前的运行页面window传了进去。
然后执行$(selector)时,就用那个window的document来进行相关对象查找。
所以对我们的例子,在iframe子页面中执行$(stringSelector),实际上查找的是父页面的对象!
那如果想查找本页面的对象应该怎么写呢,
可以这样写
var $ = window.top.jQuery; function $s(strSelector) { return $(document).find(strSelector); }
$s("#mybutton").click(
function(){alert('hi');}
);
当然,写法有点怪。
如果觉得没必要这样,那还是在iframe页面也老老实实引用jQuery.js吧。

浙公网安备 33010602011771号