javascript針對(duì)DOM的應(yīng)用分析(二)
更新時(shí)間:2012年04月15日 22:21:45 作者:
今天第二章,繼續(xù)講獲取頁(yè)面中DOM元素。大家都知道在JQ中想獲取一個(gè)元素的兄弟元素,父級(jí)元素,子元素等等是非常方便的
其實(shí)在原生的也JS也有這些屬性。和JQ幾乎相同但是比JQ少一些。但是用起來(lái)卻比JQ麻煩一點(diǎn)。主要因?yàn)镕F瀏覽器,因?yàn)镕F會(huì)把你的換行也當(dāng)做一個(gè)DOM元素。比如說(shuō)
<div id = "dom">
<div></div>
<div></div>
</div>
我用原生的JS獲取ID為dom的元素下的子元素。用我第一章說(shuō)的方法就是var a = document.getElementById("dom").getElementsByTagName("div");這個(gè)沒(méi)問(wèn)題??梢詀lert(a.length)提示會(huì)是2,但是我們現(xiàn)在換一種方法獲取就是我上章提到的var b = document.getElementById("dom").childNodes;如果這樣alert(b.length)IE瀏覽器上沒(méi)問(wèn)題還是2,但是在FF瀏覽器上會(huì)提示是4,這就是因?yàn)镕F把換行也當(dāng)做一個(gè)元素了。
所以我們必須處理一下才能用JS的那些屬性。處理思想很簡(jiǎn)單就是遍歷一下這些元素。把元素類(lèi)型為空格而且是文本都刪除。處理函數(shù)是這樣的
function del_space(elem){
var elem_child = elem.childNodes;
for(var i=0;i<elem_child.length;i++){
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue))
{elem.removeChild(elem_child)}
}}
我解釋一下這個(gè)函數(shù)
var elem_child = elem.childNodes;
把傳進(jìn)來(lái)的elem元素的子元素都扔給elem_child;
for(var i=0;i<elem_child.length;i++){
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue))
{elem.removeChild(elem_child)}
}
遍歷這些子元素。如果這些元素里面有節(jié)點(diǎn)類(lèi)型是文本并且這個(gè)文本類(lèi)型節(jié)點(diǎn)的節(jié)點(diǎn)值是空的。就把它刪除
(nodeName是JS里的一個(gè)屬性,得到這個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)類(lèi)型,/\S/這個(gè)是非空字符在JS里的正規(guī)表達(dá)式。前面加一個(gè)感嘆號(hào)就表示是空字符。test是JS的一個(gè)方法,就是把它里面的東西和外面的東西對(duì)比一下。nodeValue表示得到這個(gè)節(jié)點(diǎn)里的值removeChild也是個(gè)方法就刪除外面這個(gè)元素的某個(gè)子元素)
這樣只需要在調(diào)用這些屬性之前調(diào)用這個(gè)函數(shù)把空格清理一下就能放心用了比如
<div id = "dom">
<div></div>
<div></div>
</div>
<script>
function dom(){
var a = document.getElementById("dom");
del_space(a);調(diào)用清理空格的函數(shù)
var b = a.childNodes;獲取a的全部子節(jié)點(diǎn);
var c = a.parentNode;獲取a的父節(jié)點(diǎn);
var d = a.nextSbiling;獲取a的下一個(gè)兄弟節(jié)點(diǎn)
var e = a.previousSbiling;獲取a的上一個(gè)兄弟節(jié)點(diǎn)
var f = a.firstChild;獲取a的第一個(gè)子節(jié)點(diǎn)
var g = a.lastChild;獲取a的最后一個(gè)子節(jié)點(diǎn)
}
</script>
(另外說(shuō)下。var b = a.childNodes;獲取的也是一個(gè)數(shù)組;所以比如我要用第一個(gè)節(jié)點(diǎn)就是childNodes[0];我要用第二個(gè)節(jié)點(diǎn)就是childNodes[1];以此類(lèi)推)
到這里獲取DOM方面就算是結(jié)束了。下章就教大家如何操作DOM元素。
復(fù)制代碼 代碼如下:
<div id = "dom">
<div></div>
<div></div>
</div>
我用原生的JS獲取ID為dom的元素下的子元素。用我第一章說(shuō)的方法就是var a = document.getElementById("dom").getElementsByTagName("div");這個(gè)沒(méi)問(wèn)題??梢詀lert(a.length)提示會(huì)是2,但是我們現(xiàn)在換一種方法獲取就是我上章提到的var b = document.getElementById("dom").childNodes;如果這樣alert(b.length)IE瀏覽器上沒(méi)問(wèn)題還是2,但是在FF瀏覽器上會(huì)提示是4,這就是因?yàn)镕F把換行也當(dāng)做一個(gè)元素了。
所以我們必須處理一下才能用JS的那些屬性。處理思想很簡(jiǎn)單就是遍歷一下這些元素。把元素類(lèi)型為空格而且是文本都刪除。處理函數(shù)是這樣的
復(fù)制代碼 代碼如下:
function del_space(elem){
var elem_child = elem.childNodes;
for(var i=0;i<elem_child.length;i++){
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue))
{elem.removeChild(elem_child)}
}}
我解釋一下這個(gè)函數(shù)
var elem_child = elem.childNodes;
把傳進(jìn)來(lái)的elem元素的子元素都扔給elem_child;
復(fù)制代碼 代碼如下:
for(var i=0;i<elem_child.length;i++){
if(elem_child.nodeName == "#text" && !/\S/.test(elem_child.nodeValue))
{elem.removeChild(elem_child)}
}
遍歷這些子元素。如果這些元素里面有節(jié)點(diǎn)類(lèi)型是文本并且這個(gè)文本類(lèi)型節(jié)點(diǎn)的節(jié)點(diǎn)值是空的。就把它刪除
(nodeName是JS里的一個(gè)屬性,得到這個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)類(lèi)型,/\S/這個(gè)是非空字符在JS里的正規(guī)表達(dá)式。前面加一個(gè)感嘆號(hào)就表示是空字符。test是JS的一個(gè)方法,就是把它里面的東西和外面的東西對(duì)比一下。nodeValue表示得到這個(gè)節(jié)點(diǎn)里的值removeChild也是個(gè)方法就刪除外面這個(gè)元素的某個(gè)子元素)
這樣只需要在調(diào)用這些屬性之前調(diào)用這個(gè)函數(shù)把空格清理一下就能放心用了比如
復(fù)制代碼 代碼如下:
<div id = "dom">
<div></div>
<div></div>
</div>
<script>
function dom(){
var a = document.getElementById("dom");
del_space(a);調(diào)用清理空格的函數(shù)
var b = a.childNodes;獲取a的全部子節(jié)點(diǎn);
var c = a.parentNode;獲取a的父節(jié)點(diǎn);
var d = a.nextSbiling;獲取a的下一個(gè)兄弟節(jié)點(diǎn)
var e = a.previousSbiling;獲取a的上一個(gè)兄弟節(jié)點(diǎn)
var f = a.firstChild;獲取a的第一個(gè)子節(jié)點(diǎn)
var g = a.lastChild;獲取a的最后一個(gè)子節(jié)點(diǎn)
}
</script>
(另外說(shuō)下。var b = a.childNodes;獲取的也是一個(gè)數(shù)組;所以比如我要用第一個(gè)節(jié)點(diǎn)就是childNodes[0];我要用第二個(gè)節(jié)點(diǎn)就是childNodes[1];以此類(lèi)推)
到這里獲取DOM方面就算是結(jié)束了。下章就教大家如何操作DOM元素。
相關(guān)文章
javascript針對(duì)DOM的應(yīng)用分析(四)
從這張開(kāi)始就和大家說(shuō)一些實(shí)用的效果的寫(xiě)法。當(dāng)然首當(dāng)其沖的就是我們可愛(ài)的TAB選項(xiàng)卡,用JQ寫(xiě)選項(xiàng)卡當(dāng)然是很方便的而且方法也很多。其實(shí)用原生的JS寫(xiě)選項(xiàng)卡方法也很多2012-04-04KVM虛擬化技術(shù)之使用Qemu-kvm創(chuàng)建和管理虛擬機(jī)的方法
這篇文章主要介紹了KVM虛擬化技術(shù)之使用Qemu-kvm創(chuàng)建和管理虛擬機(jī)的方法,需要的朋友可以參考下2016-10-10前端單元測(cè)試之UI測(cè)試功能性代碼測(cè)試教程
這篇文章主要為大家介紹了前端單元測(cè)試之UI測(cè)試及功能性代碼測(cè)試教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08