getElementById兼容性
getElementById在IE6,7下存在几处bug
# 无法区分name属性和id属性。如果name值和id的值相同会造成选择性错误。
# 不区分 字母大小写
1 <form action="" id="form"> 2 姓名:<input type="text" name="name" value="尼古拉斯赵四"> 3 年龄:<input type="text" name="age" value="18"> 4 小名:<input type="text" name="littleName" id="name" value="赵四"> 5 ID=id:<input type="text" id="id" value="ID=id"> 6 </form> 7 8 <script type="text/javascript"> 9 /** 10 * 主要测试的就是IE 6,7 11 * @type {[type]} 12 */ 13 var little_name=document.getElementById('name'); 14 console.log(little_name.value);//日志: 尼古拉斯赵四 15 </script>
# 表单form 中元素有id=id时 选择表单时如果是直接用.id的方式来取值或者getAttribute(id)时返回元素本身的toString()。
1 var oForm=document.getElementById('form'); 2 var oId=document.getElementById('id'); 3 4 //#[2] 5 console.log(oForm.id);//返回id=id元素本身的toString(),实际上应该输出form 6 7 //#[3] 8 console.log(oForm.getAttribute('id'));//IE7下 日志: [object]
#如何编写一个兼容IE6,7的方法呢
1 function newGetElementById(el,id,ignoreId){ 2 var sEl; 3 //IE类型的判断最好放在外部单独判断 这样就无需每次执行函数时判断 4 var isIE67=true; 5 6 if(typeof el=='string'){ 7 ignoreId=id; 8 id=el; 9 el=document; 10 }else if(el.nodeType!=1||el!=document){ 11 return null; 12 } 13 if(ignoreId==undefined){ 14 ignoreId=true; 15 } 16 sEl=el.getElementById(id); 17 //是否忽略form 下表单元素id=id的情况存在 18 //主要是这种情况在开发时几乎很少出现,为了提高获取元素的效率而做了忽略 19 if(!isIE67){ 20 21 if(ignoreId){ 22 return sEl 23 }else{ 24 if(sEl.nodeType==1&&sEl.attributes['id'].value==id){ 25 return sEl; 26 } 27 } 28 }else{ 29 var els=document.all[id],eli;//这里要注意下 els中包含了name==id的标签 30 for(var i=0;eli=els[i];i++){ 31 console.log(els.length); 32 try{ 33 //name==id 且没有id属性时再IE6,7下空 会报异常(WIN7系统测试) 34 if(eli.nodeType==1&&(eli.attributes['id']&&(eli.attributes['id'].value==id))){ 35 return eli; 36 } 37 }catch(e){ 38 39 } 40 } 41 42 } 43 return null; 44 }

浙公网安备 33010602011771号