0

我有这个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 Ideas 为什么?

我需要申报准备好文件吗?

4

4 回答 4

2

我需要申报准备好文件吗?

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

于 2012-08-02T14:36:49.003 回答
1

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

您需要等待文档准备好(通过onDOMContentLoadedwindow.onload或任何其他延迟渲染完成的方式)才能通过 ID 访问该元素。

于 2012-08-02T14:36:33.213 回答
1

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

于 2012-08-02T14:39:43.613 回答
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.
}
于 2012-08-02T14:37:51.930 回答