我有 2 个文件:parent.html 和 child.html
parent.html 使用 jquery ajax $.get / $.post 调用 child.html
现在,在 child.html 中,我想访问 parent.html(不使用 iframe)
类似的命令
$("#id", window.parent.document).doSomething();
不起作用。如何做到这一点?
我有 2 个文件:parent.html 和 child.html
parent.html 使用 jquery ajax $.get / $.post 调用 child.html
现在,在 child.html 中,我想访问 parent.html(不使用 iframe)
类似的命令
$("#id", window.parent.document).doSomething();
不起作用。如何做到这一点?
这取决于您何时尝试访问 $("#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 版本。
您可以使用 window.opener,如果您使用子窗口作为父窗口
window.opener.$("#id").doSomething();
如果您在 parent.html 中加载 child.html,那么您可以简单地使用
$("#id").doSomething();
因为,child.html加载在parent.html里面,也是parent.html的一部分
如果您使用$.load
/$.get
将内容加载child.html
到现有元素中,parent.html
那么$('#id')
就足够了
如果您从 parent.html 发出 ajax 请求,您将收到 child.html 的 html 标记。这与打开一个可以与其父窗口交互的子窗口非常不同。
在这种情况下,您在 child.html 上的 javascript 将不会运行,因为它从未加载到浏览器窗口中。如果您希望代码执行,则必须使用 Eval 手动执行。
听起来您需要重新考虑页面的交互方式。ajax 的正常使用情况是异步拉入数据。如果您想引入功能,请查看 require.js 之类的库