我正在尝试用符合 DOM 的节点内容替换代码中的一堆 innerHTML 引用。
<html>
<body>hehe</body>
<script type="text/javascript">
var myDiv = document.createElement('div');
myDiv.setAttribute('id', 'myDivID');
document.getElementsByTagName('body')[0].appendChild(myDiv);
var textNode = '<p>This will be dynamically generated.</p>';
myDiv.appendChild(textNode);
</script>
</html>
当然,脚本不应该在主体下方,但如果我将它放在上方,javascript 会返回错误:
document.getElementsByTagName("body")[0]
未定义
因为身体还不存在。
但就像现在一样,javascript 在“appendChild”步骤中返回更深奥的错误:
uncaught exception:
[Exception... "Could not convert JavaScript argument arg 0 [nsIDOMHTMLDivElement.appendChild]"
nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"
location: "JS frame :: .....TestStuff/wut.jsp :: <TOP_LEVEL> :: line 8"
data: no]
那么,这里有什么交易?您可以用引用替换myDiv.setAttribute
和myDiv.appendChild
行,getElementById
结果是相同的。
编辑:抱歉,上述错误是 Firefox 的,而不是 chrome 的。chrome 错误是:未捕获的错误:NOT_FOUND_ERR:myDiv.appendChild 行上的 DOM 异常 8。我不明白为什么 myDiv 现在不在 DOM 上,但 chrome 似乎不这么认为。
编辑2:所以,这一行:
var textNode = '<p>This will be dynamically generated.</p>';
如果做成
var textNode = document.createTextNode('< p>This will be dynamically generated.< /p>');
将正确输出文本。但是,我想知道如何生成和附加一大块 html,这些 html 将作为实际标记而不是纯文本输出——本质上可以模拟 innerHTML。