Dom操作之兼容技巧分享
更新時(shí)間:2011年09月20日 23:37:27 作者:
在使用Dom操作HTML和XML時(shí).我們時(shí)常會(huì)遇到空格問題.或許你還沒有遇到過.
例如:我們?cè)讷@取ul下所有l(wèi)i元素的時(shí)候.或者是某個(gè)元素的下一個(gè)元素時(shí).都有可能會(huì)碰到這討厭的空格問題.當(dāng)然在IE瀏覽器里這些空格會(huì)被自動(dòng)過濾.而FF則沒有那么勤勞.FF瀏覽器會(huì)把這些空格也看作為一個(gè)元素.如果你對(duì)Dom中的空格元素感到疑惑,請(qǐng)運(yùn)行下面的代碼.至少使用IE和FF兩種瀏覽器測(cè)試.你會(huì)明白一切!
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE里彈出3.在FF里彈出7.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
var list = document.getElementById("list");
var list_child = list.childNodes; //獲取ol中所有的子元素
alert("ol中共有"+list_child.length+"個(gè)元素,分別是");
for(var i = 0; i<list_child.length; i++){
alert(list_child[i].tagName);
}
</script>
</body>
</html>
上面的代碼演示了要獲取ol元素中所有的子元素.并彈出ol內(nèi)有幾個(gè)子元素.我們可以看到ol中包含了3個(gè)li元素.在IE中彈出3這是正確的.那為什么到了FF和Chrome瀏覽器中會(huì)彈出7呢? 其實(shí)在你書寫代碼的時(shí)候.在元素與元素?fù)Q行之間都會(huì)形成一個(gè)空格.(注意:不要以為回一次車就會(huì)形成一個(gè)空格.這是錯(cuò)誤的,也就是說元素與元素之間的空白,你就是換幾百次行.也算一個(gè)空格)FF和Chrome瀏覽器不會(huì)過濾這些空格元素.所以彈出7也是正確的.
下面我們用同樣的html結(jié)構(gòu).來演示如何過濾刪除這些空格元素.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE,FF,Chrome里返回的結(jié)果一樣了.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
function Del_space(elem){ //過濾空格的函數(shù)
var elem_child = elem.childNodes; //獲取所有子元素
for(var i = 0;i<elem_child.length;i++){
//如果是文本節(jié)點(diǎn),并且內(nèi)容只包含空格則刪除該節(jié)點(diǎn)
if(elem_child[i].nodeName == "#text" && ! /\S/.test(elem_child[i].nodeValue)){
elem.removeChild(elem_child[i]);//如果該元素為空格則刪除
}
}
}
Del_space(document.getElementById("list")); //刪除ol中的所有空格
var list = document.getElementById("list");
var list_child = list.childNodes; //獲取ol中所有的子元素
for(var i=0;i<list_child.length;i++){
alert(list_child[i].tagName);
}
</script>
</body>
</html>
推薦如下方法:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE,FF,Chrome里返回的結(jié)果一樣了.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
for(var x=0,list_li = document.getElementById('list').childNodes; x<list_li.length; x++){
if(list_li[x].nodeType == 1){
alert(list_li[x].tagName);
}
}
</script>
</body>
</html>
復(fù)制代碼 代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE里彈出3.在FF里彈出7.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
var list = document.getElementById("list");
var list_child = list.childNodes; //獲取ol中所有的子元素
alert("ol中共有"+list_child.length+"個(gè)元素,分別是");
for(var i = 0; i<list_child.length; i++){
alert(list_child[i].tagName);
}
</script>
</body>
</html>
上面的代碼演示了要獲取ol元素中所有的子元素.并彈出ol內(nèi)有幾個(gè)子元素.我們可以看到ol中包含了3個(gè)li元素.在IE中彈出3這是正確的.那為什么到了FF和Chrome瀏覽器中會(huì)彈出7呢? 其實(shí)在你書寫代碼的時(shí)候.在元素與元素?fù)Q行之間都會(huì)形成一個(gè)空格.(注意:不要以為回一次車就會(huì)形成一個(gè)空格.這是錯(cuò)誤的,也就是說元素與元素之間的空白,你就是換幾百次行.也算一個(gè)空格)FF和Chrome瀏覽器不會(huì)過濾這些空格元素.所以彈出7也是正確的.
下面我們用同樣的html結(jié)構(gòu).來演示如何過濾刪除這些空格元素.
復(fù)制代碼 代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE,FF,Chrome里返回的結(jié)果一樣了.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
function Del_space(elem){ //過濾空格的函數(shù)
var elem_child = elem.childNodes; //獲取所有子元素
for(var i = 0;i<elem_child.length;i++){
//如果是文本節(jié)點(diǎn),并且內(nèi)容只包含空格則刪除該節(jié)點(diǎn)
if(elem_child[i].nodeName == "#text" && ! /\S/.test(elem_child[i].nodeValue)){
elem.removeChild(elem_child[i]);//如果該元素為空格則刪除
}
}
}
Del_space(document.getElementById("list")); //刪除ol中的所有空格
var list = document.getElementById("list");
var list_child = list.childNodes; //獲取ol中所有的子元素
for(var i=0;i<list_child.length;i++){
alert(list_child[i].tagName);
}
</script>
</body>
</html>
推薦如下方法:
復(fù)制代碼 代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Dom</title>
</head>
<body>
<h2>運(yùn)行該代碼以后.你會(huì)發(fā)現(xiàn)在IE,FF,Chrome里返回的結(jié)果一樣了.</h2>
<ol id="list">
<li>html</li>
<li>css</li>
<li>dom</li>
</ol>
<script>
for(var x=0,list_li = document.getElementById('list').childNodes; x<list_li.length; x++){
if(list_li[x].nodeType == 1){
alert(list_li[x].tagName);
}
}
</script>
</body>
</html>
您可能感興趣的文章:
- JavaScript call apply使用 JavaScript對(duì)象的方法綁定到DOM事件后this指向問題
- js學(xué)習(xí)總結(jié)之DOM2兼容處理重復(fù)問題的解決方法
- js學(xué)習(xí)總結(jié)之DOM2兼容處理順序問題的解決方法
- javascript 兼容所有瀏覽器的DOM擴(kuò)展功能
- Dom與瀏覽器兼容性說明
- DOM Scripting中的圖片切換[兼容Firefox]
- 前端開發(fā)部分總結(jié)[兼容性、DOM操作、跨域等](持續(xù)更新)
- javascript firefox兼容ie的dom方法腳本
- javascript下有關(guān)dom以及xml節(jié)點(diǎn)訪問兼容問題
- js學(xué)習(xí)總結(jié)之DOM2兼容處理this問題的解決方法
相關(guān)文章
javascript拓展DOM操作 prependChild insertAfert
Javascript dom操作中有appendChild 和insertBefore 卻沒有prependChild 和insertAfter2010-11-11javascript針對(duì)DOM的應(yīng)用分析(二)
今天第二章,繼續(xù)講獲取頁面中DOM元素。大家都知道在JQ中想獲取一個(gè)元素的兄弟元素,父級(jí)元素,子元素等等是非常方便的2012-04-04javascript針對(duì)DOM的應(yīng)用分析(三)
前兩章講了獲取DOM元素。這章就開始講如何操作dom。1.針對(duì)頁面上有的DOM元素操作,無非就是對(duì)這個(gè)dom元素的樣式進(jìn)行操作2012-04-04javascript針對(duì)DOM的應(yīng)用實(shí)例(一)
所謂針對(duì)DOM的應(yīng)用。也就我這里只教大家用javascript操作頁面中dom元素做交互2012-04-04javascript針對(duì)DOM的應(yīng)用分析(四)
從這張開始就和大家說一些實(shí)用的效果的寫法。當(dāng)然首當(dāng)其沖的就是我們可愛的TAB選項(xiàng)卡,用JQ寫選項(xiàng)卡當(dāng)然是很方便的而且方法也很多。其實(shí)用原生的JS寫選項(xiàng)卡方法也很多2012-04-04DOM2非標(biāo)準(zhǔn)但卻支持很好的幾個(gè)屬性小結(jié)
DOM2非標(biāo)準(zhǔn)但卻支持很好的幾個(gè)屬性小結(jié),需要dom操作的朋友可以參考下2012-01-01