添加javascript的DOM错误

时间:2012-03-31 02:04:23

标签: javascript dom

使用此代码

var html='<div class="somediv"></div>';
var target=document.getElementById('contentArea');
target.appendChild(html);

我正在

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
Uncaught TypeError: Cannot call method 'appendChild' of null

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

由于您没有提供您选择的DOM,因此无法确定,但我猜您在contentArea元素存在之前运行了脚本。

如果是这样,请将脚本放在body元素的末尾。

<head>
    ...
</head>
<body>
    <div id="contentArea">
       ...
    </div>

    <script type="text/javascript">
        // your script here
    </script>
</body>

或者,只需将所有内容包装在内:

window.onload = function(){
    // your script here
}

不直接相关,但您不应将HTML字符串传递给appendChild。您应该创建一个DOM节点,并附加该节点。

var target=document.getElementById('contentArea');
target.appendChild(document.createElement('div')).className = 'somediv';

答案 1 :(得分:2)

在执行DOM操作时,在获取元素之前,请确保已经加载了这些元素。将脚本放在底部,就在</body>标记应该执行

之前
//all other HTML up here

    <script>
        var html=document.createElement('div');
        html.className = 'somediv';
        var target=document.getElementById('contentArea');
        target.appendChild(html);
    </script>

</body>

或者您可以使用window.onload

运行脚本
  

load事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。

window.onload = function() {  
    var html=document.createElement('div');
    html.className = 'somediv';
    var target=document.getElementById('contentArea');
    target.appendChild(html); 
}

答案 2 :(得分:1)

var target=document.getElementById('contentArea');无法找到ID为contentArea的元素。你能发布剩下的代码吗?

答案 3 :(得分:0)

我得到了同样的错误Uncaught Error: NOT_FOUND_ERR: DOM Exception 8试图将一个jQuery对象数组添加到DOM元素中。我发现规范允许你预先添加一个DOM元素数组,但不是一个jQuery对象数组。

阅读本文:http://bugs.jquery.com/ticket/11231了解详情