我在我的应用程序的客户端上使用javascript,我需要基于id,class和tagname获取元素,我正在使用以下代码使用id
获取元素。
HTML:
<!Doctype>
<html>
<head>
<script>
(function (tag,fp,n) {
var d = document;
a = d.createElement(tag), m = d.getElementsByTagName(tag)[0];
a.async = 1;
a.src = fp;
m.parentNode.insertBefore(a, m)
})('script', 'cs.js', 'cs');
</script>
</head>
<body>
<div id="id">click me</div>
</body>
</html>
javascript(cs.js):
;(function(w, d) {
var util = {
getElements : function(selector) {
var result = [];
var hashIndex = selector.indexOf("#");
var dotIndex = selector.indexOf(".");
if(hashIndex > -1){
selector = selector.substring(hashIndex+1);
var domElem = d.getElementById(selector);
console.log(domElem);
if(domElem !=null){
result.push(domElem);
}
}
else if(dotIndex > -1){
selector = selector.substring(dotIndex+1);
var domElem = d.getElementsByClassName(selector);
if(domElem !=null){
result = domElem;
}
}else{
var domElem = d.getElementsByTagName(selector);
if(domElem !=null){
result = domElem;
}
}
return result;
}
};
console.log(util.getElements("#id"));
})(window, document);
它可以在chrome,firefox中正常工作,但在Opera中可以给出
null
。Browser Info:
Opera / 9.80(X11; Linux x86_64)Presto / 2.12.388版本/12.15这个问题有解决方法吗?
最佳答案
您的<script>
元素出现在您尝试选择的<div>
元素之前。
使用async
不能保证在脚本运行之前会触发DOM Ready事件。
移动脚本,使其在文档的后面显示,或将其绑定到事件处理程序。
关于javascript - getElementById在Opera 12.15中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16352590/