# 获取页面元素内联样式值或外联样式值:
--> 获取页面元素行内样式值可采用 ele.style.width 方法,该方法不存在浏览器之间的兼容性,但只能获取行内样式值
--> 在低版本 IE(6-8) 中,可采用 ele.currentStyle.width 方法获取内联样式或者外联样式,该方法在高版本浏览器中不支持
--> 在高版本浏览器中,可采用 window.getComputedStyle(ele [,null]).width 方法获取样式,在方法在低版本 IE 中不支持
--> 兼容性处理方法:
if(ele.currentStyle) {
alert(ele.currentStyle.width) // 低版本 IE
} else {
alert(window.getComputedStyle(ele).width) // 高版本浏览器
}
--> 兼容性处理函数封装:
function getStyle(ele,attr) {
if(ele.currentStyle) {
return ele.currentStyle[attr]
} else {
return getComputedStyle(ele [,false])[attr]
}
}
--> 注:该封装函数有一定的局限性,即 attr 必须为驼峰命名法书写,并且不能写复合样式,例如,取元素背景颜色时 attr 需写成 backgroundColor ,不能直接写 background

# 当父级元素没有子节点时向该父级元素插入子节点:
--> 向父级元素插入子节点的方法:
--> parentEle.append(newEle) // 在父级元素 parentEle 后面插入新的子节点 newEle
--> parentEle.insertBefore(newEle, someEle) // 在父级元素 parentEle 的某一子节点 someEle 前插入新的子节点 newEle
--> 在低版本 IE 中,父级元素原本没有子节点时,不能使用 parentEle.insertBefore(newEle, someEle) 方法插入第一个子节点,只能采用 parentEle.append(newEle) 方法
--> 兼容性处理方法:
var liArr = document.getElementsByTagName('li')
if(liArr.length == 0) {
parentEle.append(newEle);
} else {
parentEle.insertBefore(newEle, liArr[0]);
}

# 某一元素的子节点( childNodes )个数:
--> 例如:
<ul id="ul1">
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
在低版本 IE 中,ul 的子节点长度为3,即 alert(ul1.childNodes.length) // 3
而在高版本浏览器中,ul 的子节点长度为7,即 alert(ul1.childNodes.length) // 7
是因为在高版本浏览器中,将代码中的换行当成了文本节点,而在低版本 IE 中则不会
--> 兼容性处理方法:
1). 配合 nodeType 使用,nodeType 为1时代表元素节点,nodeType 为3时代表文本节点,可在遍历子节点时根据 nodeType 进行判断
2). 使用 children 求子节点,children 就相当于 childNodes 的兼容版本,会自动去除空文本节点

# 找出某一元素的第一个子节点:
--> 例如:
<ul id="ul1">
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
--> 在低版本 IE 中,采用 document.getElementById('ul1').firstChild 取到第一个 li 标签
--> 在高版本浏览器中,采用 document.getElementById('ul1').firstElementChild 取到第一个 li 标签
--> 同样的,尾节点(lastChild/lastElementChild)、兄弟节点(nextSibing/nextElementSibing 、 previousChild/previousElementChild)存在同样的兼容性问题
--> 兼容性处理方法:
1). var firstLi = document.getElementById('ul1').firstElementChild || document.getElementById('ul1').firstChild
此时的 firstLi 就是兼容后的第一个 li 标签
2). 采用遍历加 nodeType 判断的方法取得第一个 li 标签

 

posted on 2021-04-06 14:57  取名向来是件难事  阅读(59)  评论(0编辑  收藏  举报