javascript解决getElementById()的bug以及getElementsByClassName的兼容性写法

<a name="target" href="#">链接</a>
<p id="target">文字说明</p>

一、 以上代码中都可以通过document.getElementById("target")获取a标签和p标签,这就是getElementById()的bug所在;

 <script>
var getElementById=function(id){
var el=document.getElementById(id);
if(!+"\v1"){ //判断浏览器 if(!+"\v1"){} IE浏览器中对\v1转换成v1 其他浏览器转换成1,!表示取反,IE浏览器中对!v1理解为true
if(el&&el.id==id){
return el;
}else{
var els=document.all[id],
n=els.length;
for(var i=0;i<n;i++){
if(els[i].id==id){
return els[i];
}
}
}
}
return el;
};
</script>

二、getElementsByClassName的兼容性写法

 var getElementsByClassName = function(opts) {
var searchClass = opts.searchClass;
var node = opts.node || document;
var tag = opts.tag || '*';
var result = []; if (document.getElementsByClassName) {
var nodes = node.getElementsByClassName(searchClass);
if (tag !== "*") {
for (var i = 0; node = nodes[i++];) {
if (node.tagName === tag.toUpperCase()) {
result.push(node);
}
}
} else {
result = nodes;
}
return result;
} else {
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var i, j;
var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if (pattern.test(els[i].className)) {
result[j] = els[i];
j++;
}
}
return result;
}
}
上一篇:Linux 虚拟机VMware安装失败,提示没有选择磁盘


下一篇:java removeAll和重写equals、hashcode引起的性能问题