我有这个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想法为什么?
我是否需要准备好文件?
答案 0 :(得分:2)
我是否需要准备好文件?
是的,确切地说。在文档准备好之前(即所有标记都被解析为DOM元素),您将无法通过id获取元素。这仅适用于已解析的脚本标记上方的元素。在<head>
结束之前从</body>
移动脚本包含会有所帮助。或者,您需要使用各种DOMContentLoaded
或onload
事件之一,但遗憾的是,这些事件不支持跨浏览器。我建议搜索一个好的片段或使用一个库。
答案 1 :(得分:1)
假设您正在文档的<head>
中加载该脚本,那么当该元素尚未加载到DOM中时,您正试图通过ID获取元素。
您需要等待文档准备就绪(通过onDOMContentLoaded
,window.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.
}