为了使我的用户脚本正常工作,我实施了一个难看的修复程序。为了制作更直接和可维护的代码,我需要更好地理解为什么丑陋的修复工作。一些代码供您考虑:
var win = window.open('','');
var txt = '<div id="myId"></div>';
win.document.write(txt);
win.document.close();
alert($('#myId').length); // <=== displays a "0" ... WHY not a "1"??
弹出窗口中运行的用户脚本提供以下内容:
alert('Running from the popup window '+$('#myId').length); // <=== displays a "1" ... why only here?
为什么$('#myId')
在从生成弹出窗口的窗口运行用户脚本时没有正确选择div
,但确实选择div
当从弹出窗口本身运行用户脚本时?理解这两种情况之间的区别是我能够简化代码的关键(具体来说,是能够从父窗口控制所有内容,而不是要求在弹出窗口上运行单独的用户脚本)。
注意:这个问题是the one that I asked earlier的一个更集中的问题。
答案 0 :(得分:0)
jQuery(更具体地说是JS本身)将仅在当前窗口中搜索元素(如您所知,Window对象是浏览器中的顶级对象)。弹出窗口是另一个窗口,有自己的Window对象。所以有两个不同的范围。在第一种情况下,您只在父窗口中搜索,此窗口不包含#myId
,因此jQuery什么都没找到。