我的代码给了我一个错误消息:GetElementById()为null或不是对象

时间:2012-08-02 14:31:21

标签: javascript

我有这个js代码:

var id = document.getElementById("myDiv").getAttribute("data-id");  

et="Your Message Here";
el="http://x2.xclicks.net/sc/out.php?s="+id+""
sl=new Array(); 
sn=new Array();
a="</a>"; af="<a target='_blank'";


function dw(n) {document.write(n,"\n");}
function showLink(n,s,b){
    if(!s) {s='anc'} 
    if(!b) {b=''} 
    else   {b="&b="+b}
    ast = af+" class='"+s+"' href='"+el; 
    n   = n-1; 
    if(sl[n]&&sl[n]!="") {
        dw(ast+"&o="+sl[n]+b+"'>"+sn[n]+a)
    } else {
        dw(ast+b+"'>"+et+a)
    }
}

我在header.php中加载了这样的内容:

<script type="text/javascript" src="<? bloginfo('template_url'); ?>/js/trf.js"></script>

问题在于虽然这是正确的:

var id = document.getElementById("myDiv").getAttribute("data-id");

我收到此错误:

getElementById()为null或不是对象

Ady想法为什么?

我是否需要准备好文件?

4 个答案:

答案 0 :(得分:2)

  

我是否需要准备好文件?

是的,确切地说。在文档准备好之前(即所有标记都被解析为DOM元素),您将无法通过id获取元素。这仅适用于已解析的脚本标记上方的元素。在<head>结束之前从</body>移动脚本包含会有所帮助。或者,您需要使用各种DOMContentLoadedonload事件之一,但遗憾的是,这些事件不支持跨浏览器。我建议搜索一个好的片段或使用一个库。

答案 1 :(得分:1)

假设您正在文档的<head>中加载该脚本,那么当该元素尚未加载到DOM中时,您正试图通过ID获取元素。

您需要等待文档准备就绪(通过onDOMContentLoadedwindow.onload或任何其他延迟方式,直到呈现完成为止,以便按ID访问该元素。

答案 2 :(得分:1)

我会尝试将其包裹在$(document).ready中。你很可能只是在DOM准备好之前尝试访问它

答案 3 :(得分:0)

您正在标题中加载脚本,这意味着脚本正在文档的其余部分之前加载。在脚本中,你正在直接调用document.getElementById,并且因为文档的其余部分还没有完成加载,所以你所追求的元素的可能性非常高。

您需要延迟运行脚本的这一部分,直到文档完全加载。将该部分脚本包装在函数中,并在body.onload事件期间调用它。

作为一个例子(还有其他方法可以实现相同的结果):

window.document.onload = function(e){ 
    var id = document.getElementById("myDiv").getAttribute("data-id");  

    // Now you have the id and can do whatever you want with it.
}