jQuery學習筆記(二)jQuery中DOM操作


 目錄

 

 

 

本篇主要介紹DOM操作,在說DOM操作之前,首先我們應該熟悉DOM樹,以一個例子為例來說明DOM樹。首先看這段HTML代碼.(本文后面的代碼如果沒有特別指出,都是針對下述HTML代碼進行操作)

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title>愛好</title>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6 </head>
 7 <body>
 8 <p title="你最喜歡的運動">你最喜歡的運動是什么呢</p>
 9     <ul>
10         <li title="籃球">籃球</li>
11         <li title="足球">足球</li>
12         <li title="羽毛球">羽毛球</li>
13
14     </ul>
15 </body>
16 </html>

 

 

其DOM結構如圖1 所示。

         

                           圖1

圖一就是該HTML代碼的一顆DOM數。對DOM的各種操作事實上都是對這顆DOM樹展開的。

在掌握各種DOM操作之前,首先需要了解DOM操作的分類。

一. DOM操作的分類

1. DOM Core

  DOM Core 可以處理任何一種使用標簽的語音,不只是HTML,還有XML等等。在JS中我們常用到的getElementById()、getElementByTagName()、getAttribute()、setAttribute()等方法都屬於DOM Core中的核心方法。

2. HTML-DOM

  一般而言,HTML-DOM只是用於處理Web文檔。

3.CSS-DOM

  CSS-DOM主要用於獲取和設置style對象的各種屬性。

二.jQuery中的各種DOM操作

  jQuery作為js的一種類庫,不僅繼承了DOM的一些操作,更加發揚了DOM操作,使其對DOM操作更加的靈活。

1. 查找節點

主要是通過jQuery選擇器來完成。結合文章開頭的DOM樹實例就行說明。

1.1查找元素節點

  以上述DOM樹為例,來說明如何執行查找元素節點,執行下述代碼就可打印出“籃球”。                                                                

1 var $li=$("ul li:eq(0)");   //查找ul中第一個<li>
2 alert($li.text());          //打印出第一個節點中的文本內容

 

1.2 查找屬性節點

  通過使用attr()獲取屬性的值,參數可以為多個。執行下述代碼就會彈出“你最喜歡的運動”.

var $p=$("p");                  //獲取節點<p>
var p_text=$p.attr("title");   //獲取節點<p>的屬性title的值
alert(p_text);            //打印title的值

 

 

2. 創建節點

  很多時候,我們不僅僅是要查找節點,還需要創建節點,例如我們在瀏覽淘寶網店的時候,當鼠標放到一幅圖片上的時候,鼠標旁馬上就會有一張更大的圖片來顯示,其實這張大的圖片就是開辟了一個新的<div>區域,或者更准確的來說是創建了一個新的節點掛在了DOM樹上。

2.1 創建元素節點

  創建元素節點並不只是單單創建元素節點,還需要將其掛到DOM樹上。例如我們創建一個<li>節點然后將其掛在<ul>上,具體代碼如下:

var $li_new=$("<li></li>");        //創建一個<li>元素
$("ul").append($li_new);           //將其添加到<ul>下   

2.2 創建文本節點

  剛才只是創建了一個節點,並沒有先該節點中添加任何文本內容,如果我們要創建文本節點,只需要向剛才的元素節點中添加文本內容就行。具體代碼如下:

var $li_new=$("<li>乒乓球</li>");      //創建一個文本節點,文本內容為乒乓球
$("ul")。append($li_new);              //將其掛在<ul>上

此時HTML顯示如圖2所示  

3.3 創建屬性節點

  與創建文本節點相似,也是在創建元素節點時候一起創建。如下行代碼。

1   var $li_new1=$("<li title="羽毛球">羽毛球</li>");//創建屬性節點
2 $("ul").append($li_new1); //將該屬性節點掛在<ul>

 

  可見,title屬性在隨着<li>節點創建的時候也一起創建了。

 

3. 插入節點

  從上面的例子可以看出一種插入節點的方法是通過jQuery中的append()方法,下面通過表1將插入節點的各種方法進行總結。

              表1                                            插入節點的各種方法

方法   描述 示例
append() 向每個匹配元素內部追加節點或是內容 

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$("p").append(“<b>還不錯哦.</b>”);

結果:<p>你好嗎?<b>還不錯哦.</b></p>

appendTo()

$(A).append(B):是將B追加到A上

$(A).appendTo(B):是將A追加到B上

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$("<b>還不錯哦.</b>").appendTo(“p”);

結果:<p>你好嗎?<b>還不錯哦.</b></p>

 prepend()  向每個匹配的元素內部追加內容   

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$("p").prepend(“<b>還不錯哦.</b>”);

結果:<p><b>還不錯哦.</b>你好嗎?</p>

 prependTo()

$(A).prepend(B):是將B追加到A上

$(A).prependTo(B):是將A追加到B上 

 

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$("<b>還不錯哦.</b>").aprependTo(“p”);

結果:<p><b>還不錯哦.</b>你好嗎?</p>

 after() 在每個匹配的元素之后添加內容   

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$("p").after(“<b>還不錯哦.</b>”);

結果:<p>你好嗎?</p><b>還不錯哦.</b>

insertAfter

$(A).after(B):將B插入到A后

$(A).insertAfter(B):將A插入到B后

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$(“<b>還不錯哦.</b>”).insertAfter(“p”);

結果:<p>你好嗎?</p><b>還不錯哦.</b>

before() 在每個匹配元素之前插入內容

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$(“p”).before(“<b>還不錯哦.</b>”);

結果:<b>還不錯哦.</b><p>你好嗎?</p>

insertBefore()

$(A).before(B):將B插入到A前

$(A).insertBefore(B):A插入到B前

HTML代碼:<p>你好嗎?</p>

jQuery代碼:$(“<b>還不錯哦.</b>”).insertBefore(“p”);

結果:<b>還不錯哦.</b><p>你好嗎?</p>

4. 刪除節點

  jQuery中提供了三種方法刪除多余的節點。分別是remove()、detach()、empty()。下面一一介紹。

4.1 remove()方法

$("ul li:eq(0)").remove();     //獲取ul下的第一個<li>節點后,刪除該節點

 

值得注意的有兩點:1.經remove()方法刪除后的節點還可以恢復, 例如上述代碼被刪除后可以通過以下代碼恢復

1 var $li_delete=$("ul li:eq(0)");     //獲得ul下第一個li節點
2 $li_delete.remove();                 //將該節點刪除
3 $("ul").append($li_delete);          //在將被刪除的節點添加到ul上,需要注意的是此時該li節點被放置到ul的最后面

 

但是這種恢復節點,該節點上所綁定的事件將不會恢復。

 2.remove()可以帶參數,例如一下這行代碼

1 $("ul li").remove(“li[title=籃球]”);     //在<ul>下,刪除屬性title為籃球的li的節點

 

 4.2 detach()方法

  具體用法與remove方法基本一樣。與remove()方法相同的是該方法在刪除元素節點后,也可以恢復元素。與remove()方法不同的是該方法刪除所匹配的元素時,並不會刪除該元素所綁定的事件、附加的數據,比如說:一個<p>綁定了一個click(function(){ alert("能恢復嗎?");});事件,如果用remove()刪除之后,再次恢復該元素時候並不會恢復click()事件,而detach()方法則在恢復時,同時也可以恢復其click()事件。

 4.3empty()方法

  准確的說,empty()方法並不是刪除節點,而是清空節點,清空元素中的所有后代節點。最后只剩一個空節點(該元素的屬性依然存在)。例如我們清空第三個羽毛球的<li>節點。可以用下述代碼完成。

1 $("ul li:eq(2)").empty;   //清空該節點

 

 清空后HTML頁變為圖3所示。

 

                                       圖3

 

  該圖說明只是清空節點,並沒有情況該節點所對應的屬性。

 

5. 復制節點

  通過使用clone()方法,值得注意的是:如果只寫clone()則表示說明只復制節點,復制節點后,被復制的新元素並不具有任何行為,如何想復制原節點所綁定的行為(事件),那么寫法應該為clone(true).

 

6.替換節點  

  兩個方法replaceWith()與replaceAll(): $(A).replaceWith(B):用B替換A     

  $(A).replaceAll(B):用A替換B

7. 包裹節點

  jQuery提供的方法是wrap().參考下行示例代碼。

$("p").wrap(""<b></b>"");   用<b>標簽將<p>包裹起來

 

8. 屬性操作

1. 獲取屬性和設置屬性

  通過attr()方法。

2. 刪除屬性

  通過removeAttr();如下例代碼。

1 $("p").removeAttr("title");     //刪除<p>的title屬性

 

 

9. 樣式操作

1.獲取樣式和設置樣式

  我們知道,在HTML中改變樣式的方法是通過CSS來完成的,一般都通過在元素中定義id或者class,而id或者class也輸入該元素的一個屬性,故可以通過attr()方法來獲取和設置其屬性。例如<p>標簽中原始屬性是class=start,在CSS中又定義了一個end的樣式。這時我們就可以通過以下代碼進行設置樣式。

1 $("p").attr("class",“end”);  //將<p>標簽的樣式class從start該為end

 

2. 追加樣式

  通過jQuery中提供的addClass()方法進行追加樣式,值得注意的是addClass()是該原先的樣式中添加了一種新的樣式(多了一種樣式,如果以前樣式是一種則使用該方法后樣式變為兩種),而attr()則是該變了元素的初始樣式(樣式沒有增多)。

3. 移除樣式

  通過jQuery中的removeClass()方法。如果參數為空,則代表是移除其所有的樣式。

4. 切換樣式

  通過使用jQuery中的toggle()方法,該方法在jQuery中有着廣泛的應用,以后要出一篇blog要把常用的jQuery方法進行總結。這里只說toggle()方法應該如何切換樣式。實際上,通過的是tooggleClass()方法進行切換。該方法可以控制樣式的重復切換,如果類名存在就刪除它,如果類名不存在就添加它。示例代碼如下。

1 $("p").tooggleClass("another");              //重復切換類名anohter

 

5. 判斷是否含有某個樣式

  通過hasClass()方法進行判斷,如果有則返回true,沒有返回false。

 

10. 設置和獲取HTML、文本、值

1. html()方法

  該方法類似於javascript中的innerHTML屬性,獲取的是HTML代碼。

2.text()方法

  該方法類似於javascript中的innerText屬性,獲取的是文本內容。

3.val()方法

  該方法類似與javascript中的value屬性,獲取或者設置元素的值。需要注意的是,如果獲取的是多個元素,那么返回值也將是含多個元素值的集合。

 

11. 遍歷節點

1. children()方法

  children()方法只考慮子元素,而不考慮后代元素。我們重點關注下該方法。首先我們還是回顧下blog開頭的DOM樹。然后在看下述代碼。

1 var $body=$("body").children();
2 var $p=$("p").children();
3 var $ul=$("ul").children();
4 alert($body.length);     //結果為2
5 alert($p.length);        //結果為0
6 alert($ul.length);       //結果為3

 

如果要遍歷li元素,我們則可以通過一個for循環進行遍歷。在返回的結果也可以看出children()方法並沒有考慮后代元素。

2.next()方法

  獲得匹配元素后面緊鄰的同輩元素

3. prev()方法

  獲得匹配元素前面緊鄰的同輩元素

4.siblings()方法

  取得匹配元素前后所有的同輩元素

 

12. CSS-DOM操作

  該技術一句話來說就是控制sytle對象的各種屬性。如果我們要設置blog開頭DOM樹中的<p>的樣式,我們可以通過以下代碼就行設置。

1 $("p").css({"color":"red","font-size":"14px"});  //設置<p>的顏色和字體

 

小結

  對DOM的操作就先寫到這里吧,這篇博客也是對上一篇博客中的jQuery選擇器的一種實際應用,jQuery中的對DOM操作應是jQuery的核心部分之一。掌握好DOM操作之后才能把jQuery中的事件、動畫、表單表格應用甚至是AJAX才能充分利用好。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM