父窗口和弹出窗口之间的jQuery选择器行为差异

时间:2017-12-13 06:54:21

标签: javascript jquery popup jquery-selectors tampermonkey

为了使我的用户脚本正常工作,我实施了一个难看的修复程序。为了制作更直接和可维护的代码,我需要更好地理解为什么丑陋的修复工作。一些代码供您考虑:

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的一个更集中的问题。

1 个答案:

答案 0 :(得分:0)

jQuery(更具体地说是JS本身)将仅在当前窗口中搜索元素(如您所知,Window对象是浏览器中的顶级对象)。弹出窗口是另一个窗口,有自己的Window对象。所以有两个不同的范围。在第一种情况下,您只在父窗口中搜索,此窗口不包含#myId,因此jQuery什么都没找到。