getElementById不在歌剧中工作12.15
我在我的应用中使用客户端的JavaScript,我需要基于id,class和tagname来获取元素,我使用以下代码获取使用id
的元素。getElementById不在歌剧中工作12.15
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);
它正常工作在浏览器,Firefox但在歌剧它给null
。
Browser Info:
歌剧院/ 9.80(X11,Linux的x86_64的)的Presto/2.12.388版本/ 12.15
任何办法解决这个问题?
你<script>
元素。
使用async
不保证在脚本运行之前DOM Ready事件将触发。
移动脚本,使其稍后出现在文档中,或将其绑定到事件处理程序。
感谢工作正常 – karthick 2013-05-03 09:15:27
也许你可以尝试通过“名” -attribute给一个DOMElement一个名字,做:
var domElement = document.getElementsByName("element_name")[0];
console.log(domElement);
我希望它工作的方式。
请不要回答这样模糊的问题。 'getElementsByName'不可取代'getElementById' – Bergi 2013-05-03 07:03:17
我没有该版本的Opera来测试您的声明,但您可以考虑使用document.querySelector作为替代方案。
HTML
<div id="id"></div>
的Javascript
var domElement = document.querySelector("#id");
console.log(domElement);
更新@bergi
下面是一个例子,其中的环境已被打破,这可能是故意的设计(谁知道),反正OP没有控制在所述环境中。
document.getElementById = function() {
return null;
};
var domElement = document.getElementById("id");
console.log(domElement);
domElement = document.querySelector("#id");
console.log(domElement);
哦,亲爱的,getElementById
不起作用,但querySelector
一样。
我不是不同意,这个问题比较模糊,但仍...您要选择<div>
元素之前出现
请不要回答这样模糊的问题。 'querySelector'并不比'getElementById'更好(有一个具体的例子,但你必须提到这一点) – Bergi 2013-05-03 07:02:49
我没有说“prefereable”,而是“考虑作为替代”,这将是一个特例如果getElementById不起作用。但请告诉我你的想法? – Xotic750 2013-05-03 07:04:48
否。如果'document.getElementById'不工作(返回'null'),则'querySelector'也不起作用。 – Bergi 2013-05-03 07:05:50
你能分享一个现场问题的例子吗?与此同时,[本bin](http://jsbin.com/ufomam/1/edit)在Opera 12.15 for W7上完美运行。 – 2013-05-03 06:04:29
尝试构建一个*完整的*减少的测试用例。我们不能说出那个狙击手有什么问题。 (如果id的值是'id',则表明即使是这个snippit也是可以设想的,并且可能不会反映那些不工作的代码)。 – Quentin 2013-05-03 06:04:42
FabrícioMatté的代码在Opera 12.15上也可以正常工作。 – Quentin 2013-05-03 06:07:12