' ImportNode '和从' iframe '中提取元素
`ImportNode` in Firefox and extracting an element from an `iframe`
我正在尝试使用以下示例来理解html中的importNode
。
假设我们有一个content.html
:
<html>
<body>
<nav id="sidebar1" class="sidebar">
Hi there!
</nav>
</body>
</html>
和main.html
:
<html>
<body>
<iframe src='content.html' hidden='true'></iframe>
<script>
var idframe = document.getElementsByTagName("iframe")[0];
var oldNode = idframe.contentWindow.document.getElementsByTagName("nav")[0];
var newNode = document.importNode(oldNode, true);
document.getElementsByTagName("body")[0].appendChild(newNode);
alert("HI!!!");
</script>
</body>
</html>
我得到错误:
TypeError: Argument 1 of Document.importNode is not an object.
var newNode = document.importNode(oldNode, true);
什么是正确的方式来获得一个元素从iframe和插入到我的html?
只能在加载iframe文档后才能访问iframe文档的内容。这可以通过不同的方式实现:
- 通过将您的访问代码放入主(包含
iframe
元素)文档窗口的load
处理程序, - 或在
iframe
中加载的文档的DOMContentLoaded
事件监听器中。
下面是使用主文档window
的load
事件的示例:
window.addEventListener('load', function() {
var iframe = document.getElementsByTagName("iframe")[0];
var oldNode = iframe.contentWindow.document.getElementById("myNode");
var newNode = document.importNode(oldNode, true);
document.body.insertBefore(newNode, document.body.firstChild);
}, false);
否则,当您尝试访问iframe内容时,它尚未加载。
请参阅JSFiddle中的实时示例(iframe内容被编码在iframe
的srcdoc
属性中,因为我不知道在JSFiddle中创建子文档而不创建单独的fiddle的能力)。
相关文章:
- 提取没有特定子元素的主体元素
- 使用JavaScript在Json中提取时,将数组的元素转换为String
- 用于提取 HTML 标记子元素的正则表达式
- 从 Ajax-JSON 中提取元素
- 使用 javascript 从 html 中提取元素
- Knockout.js 从 observableArray 中提取元素返回 undefined
- 使用xpath脚本从html源代码中提取元素
- 如何从 id 中提取元素
- ' ImportNode '和从' iframe '中提取元素
- 根据ID从字符串中提取元素
- 如何在jQuery中提取元素属性值到列表
- 从ClojureScript中的html-string中提取元素
- 如何遍历数组并根据其数据类型提取元素
- 如何在javascript中使用提取元素循环图像
- 正在从变量中提取元素
- 如何从数组中提取元素,并将其放入javascript中的文本字段中
- 从数组javascript中提取元素
- 从数组中提取元素
- 如何在Jquery中从Json响应中提取元素
- 提取元素的HTML