0

我有 2 个文件:parent.html 和 child.html

parent.html 使用 jquery ajax $.get / $.post 调用 child.html

现在,在 child.html 中,我想访问 parent.html(不使用 iframe)

类似的命令

$("#id", window.parent.document).doSomething(); 

不起作用。如何做到这一点?

4

4 回答 4

1

这取决于您何时尝试访问 $("#parent_id")。

如果您直接在“child.html”中的某个脚本标记中调用 $("#parent_id") ,它将不起作用,因为您还没有加载 html。

如果它是加载孩子后事件调用的结果,它应该可以工作。

例如,这应该有效:

<html>
<head>
<script src="http://code.jquery.com/jquery-2.0.0.min.js"></script>
<script>
    $(function() {
        var child_html = "<button onclick=\"$('#update_me').html('hello!')\">click me!</button>";
        $("#place_for_child").append(child_html);
    });
</script>
</head>
<body>
<div id="update_me"></div>
<div id="place_for_child"></div>
</body>
</html>

该变量child_html可以从单独的文件中加载。

这是jsfiddle 版本

于 2013-05-07T07:30:18.373 回答
0

您可以使用 window.opener,如果您使用子窗口作为父窗口

         window.opener.$("#id").doSomething();

如果您在 parent.html 中加载 child.html,那么您可以简单地使用

            $("#id").doSomething();

因为,child.html加载在parent.html里面,也是parent.html的一部分

于 2013-05-07T07:16:03.023 回答
0

如果您使用$.load/$.get将内容加载child.html到现有元素中,parent.html那么$('#id')就足够了

于 2013-05-07T07:16:21.730 回答
0

如果您从 parent.html 发出 ajax 请求,您将收到 child.html 的 html 标记。这与打开一个可以与其父窗口交互的子窗口非常不同。

在这种情况下,您在 child.html 上的 javascript 将不会运行,因为它从未加载到浏览器窗口中。如果您希望代码执行,则必须使用 Eval 手动执行。

听起来您需要重新考虑页面的交互方式。ajax 的正常使用情况是异步拉入数据。如果您想引入功能,请查看 require.js 之类的库

于 2013-05-07T07:29:18.260 回答