Dom是Document Object Model的縮寫,意思是文檔對象模型。DOM是一種與瀏覽器、平臺、語言無關的接口,使用該接口能夠輕鬆訪問頁面中全部的標準組件。DOM操做能夠分爲三個方面即DOM Core(核心)、HTM-DOM和CSS-DOM。css
每個網頁均可以用DOM表示出來,每一個DOM均可以看做是一棵DOM樹。下面的html頁面結構能夠構建出一棵DOM樹,代碼:html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" <title>DOM Demo</title> </head> <body> <p title="選擇你最喜歡的水果.">你最喜歡的水果是?</p> <ul> <li title="蘋果">蘋果</li> <li title="橘子">橘子</li> <li title="菠蘿">菠蘿</li> </ul> </body> </html>
構建出的DOM樹以下:數據庫
JQuery中的DOM操做主要對包括:建【新建】、增【添加】、刪【刪除】、改【修改】、查【查找】【像數據庫操做】。下面的DOM操做將圍繞上面的DOM樹進行學習JQueryDOM操做。數組
查找節點很是容易,使用選擇器就能輕鬆完成各類查找工做。例:查找元素節點p返回p內的文本內容$("p").text();例:查找元素節點p的屬性返回屬性名稱對應的屬性值$("p").attr("title"),返回p的屬性title的值。瀏覽器
建立元素節點而且把節點做爲<ul>元素的子節點添加到DOM節點樹上。先建立元素點,建立元素節點使用Jquery的工廠函數$()來完成,格式以下:$(html),該方法會根據傳入的html字符串返回一個DOM對象,並將DOM對象包裝成一個JQuery對象後返回。建立一個元素節點JQuery代碼以下:app
$li1=$("<li></li>")ide
代碼返回$li1就是一個由DOM對象包裝成的JQuery對象。把新建節點添加到DOM樹中JQuery代碼以下:函數
$("ul").append($li1); post
添加後頁面中只能看到<li>元素默認的"·",因爲沒有爲節點添加文本因此只顯示默認符號,下面建立文本節點。學習
PS:append()方法是添加DOM節點方法詳見增--添加DOM節點。
使用JQuery的工廠函數$()一樣可以建立文本節點,建立文本節點的JQuery代碼以下:
$li2=$("<li>蘋果</li>");
代碼返回$li2就是一個由DOM對象包裝成JQuery對象,把新建的文本節點添加到DOM樹中JQuery代碼以下:
$("ul").append($li2);
添加後頁面中能看到"·蘋果",右鍵查看頁面源碼發現新加的文本節點沒有title屬性。下面方法建立帶屬性的節點。
建立屬性節點同元素節點、文本節點同樣使用JQuery的工廠函數完成。建立屬性節點的JQuery代碼以下:
$li3=$("<li title='榴蓮'>榴蓮</li>");
代碼返回$li3也是一個由DOM對象包裝成JQuery對象,把新建的屬性節點添加到DOM樹中JQuery代碼以下:
$("ul").append($li3);
添加後頁面中能看到"·榴蓮",右鍵查看頁面源碼發現新加的屬性節點有title='榴蓮'屬性。
動態新建元素不添加到文檔中沒有實際意義,將新建的節點插入到文檔中有多個方法,以下:append()、appendTo()、prepend()、prependTo()、after()、insertAfter()、before()、insertBefore()。
append()方法向匹配的元素內部追加內容, 方法以下:$("target").append(element);例:
$("ul").append("<li title='香蕉'>香蕉</li>");
該方法查找ul元素,而後向ul中添加新建的li元素。
appendTo()方法將全部匹配的元素追加到指定的元素中,該方法是append()方法的顛倒[操做主題的顛倒並不是操做結果]操做。方法以下:$(element).appendTo(target);例:
$("<li title='荔枝'>荔枝<li>").appendTo("ul");
該方法新建元素li,而後把li添加到查找到的ul元素中。
prepend()方法將每匹配的元素內部前置要添加的元素,方法以下:$(target).prepend(element);例:
$("ul").prepend("<li title='芒果'>芒果</li>")
該方法將查找元素ul而後將新建的li元素做爲ul子節點,且做爲ul的第一個子節點插入到ul中。
prependTo()方法將元素添加到每個匹配的元素內部前置,方法以下:$(element).prependTo();例:
$("<li title='西瓜’>西瓜</li>").prependTo("ul");
該方法將新建的元素li插入到查找到的ul元素中做爲ul的第一個子節元素。
after()方法向匹配的元素後面添加元素,新添加的元素作爲目標元素後的緊鄰的兄弟元素。方法以下:$(target).after(element);例:
$("p").after("<span>新加段新加段新加段新加段新加段</span>");
方法將查找節點p,而後把新建的元素添加到span節點後面作爲p的兄弟節點。
insertAfter()方法將新建的元素插入到查找到的目標元素後,作爲目標元素的兄弟節點。方法以下:$(element).insertAfter(target);例:
$("<p>insertAfter操做</p>").insertAfter("span");
方法將新建的p元素添加到查找到目標元素span後面,作爲目標元素後面的第一個兄弟節點。
before()方法在每個匹配的元素以前插入,作爲匹配元素的前一個兄弟節點。方法以下:$(target).before(element);例:
$("p").before("<span>下面是個段落</span>");
before方法查找每一個元素p,將新建的span元素插入到元素p以前作爲p的前一個兄弟節點。
insertBefore()方法將新建元素添加到目標元素前,作爲目標元素的前一個兄弟節點,方法以下:$(element).insertBefore(target);例:
$("<a href='#'>錨</a>").insertBefore("ul");
insertBefore()新建a元素,將新建的a元素添加到元素ul前,作爲ul的前一個兄弟節點。
增長元素的方法前四個是添加到元素內部,後四個是添加到元素外部的操做,有這些方法能夠完成任何形式的元素添加。
若是想要刪除文檔中的某個元素JQuery提供了兩種刪除節點的方法:remove()和empty();
remove()方法刪除全部匹配的元素,傳入的參數用於篩選元素,該方法能刪除元素中的全部子節點,當匹配的節點及後代被刪除後,該方法返回值是指向被刪除節點的引用,所以可使用該引用,再使用這些被刪除的元素。方法以下:$(element).remove();例:
$span=$("span").remove();
$span.insertAfter("ul");
該示例中先刪除全部的span元素,把刪除後的元素使用$span接收,把刪除後的元素添加到ul後面作爲ul的兄弟節點。該操做至關於將全部的span元素以及後代元素移到ul後面。
empty()方法嚴格來說並非刪除元素,該方法只是清空節點,它能清空元素中的全部子節點。方法以下:$(element).empty();例:
$("ul li:eq(0)").empty();
該示例使用empty方法清空ul中第一個li的文本值。只能下li標籤默認符號」·「。
修改文檔中的元素節點可使用多種方法:複製節點、替換節點、包裹節點。
複製節點方法可以複製節點元素,而且可以根據參數決定是否複製節點元素的行爲。方法以下:$(element).clone(true);例:
$("ul li:eq(0)").clone(true);
該方法複製ul的第一個li元素,true參數決定複製元素時也複製元素行爲,當不復制行爲時沒有參數。
替換節點方法可以替換某個節點,有兩種形式形式實現:replaceWith()和replaceAll().使用replaceWith方法使用後面的元素替換前面的元素,replaceAll方法使用前面的元素替換後面的元素,方法以下:$(oldelement).replaceWith(newelement);$(newelement).repalceAll(oldelement);例: $("p").replaceWith("<strong>我要留下</strong>");該方法使用strong元素替換p元素。
$("<h3>替換strong</h3>").repalceAll("strong");該例使用h3元素替換全部的strong元素。
包裹節點方法使用其餘標記包裹目標元素從而改變元素的顯示形式等,而且該操做不會破壞原始文檔的詞義。包裹節點有三種實現形式:wrap();wrapAll();wrapInner();
wrap()方法以下:$(dstelement).wrap(tag);例:
$("p").wrap("<b></b>");該示例方法使用b標籤包裹全部的p元素每一個元素都使用b標籤包裹。
wrapAll()方法以下:$(dstelement).wrapAll(tag);例:
$("p").wrapAll("<b></b>");訪示例方法使用b標籤包裹全部的p元素,全部的p元素標籤用一個b標籤包裹。
wrapInner()方法以下:$(dstelement).wrapInner(tag);例:
$("strong").wrapInner("<b></b>");該示例使用b標籤包裹每一個一strong元素的子元素。
attr()方法可以獲取元素屬性,也能可以設置元素屬性。方法以下,當attr(para1)方法有個參數時候用於得到當前元素的para1的屬性值,當attr(para1,attrValue)有兩個參數時候設置當前元素的屬性名爲para1的屬性值爲attrValue;例:
$("p").attr("title");該示例用於得到p元素的title屬性值。
$("p").attr("title","你最喜歡的水果");該示例設置p元素的title屬性值爲"你最喜歡的水果";
若是一次設置多個屬性值可使用「名/值」對形式,例:
$("p").attr({"title":"你最喜歡的水果","name":"水果"})。該示例一次設置兩個屬性值。
removeAttr()方法用於刪除特定的屬性,方法是在參數中指定屬性名。例:
$("p").removeAttr("name");該方法就是移除p元素的name屬性。
添加樣式addClass()方法,使用該方法對目標元素添加相應的樣式,方法以下:$(element).addClass();例:
$("p").addClass("ul");該示例設置元素p的樣式爲ul。
移除樣式removeClass()方法,使用該方法移除目標元素的指定樣式,方法以下:$(element).removeClass();例:
$("p").removeClass("ul");該救命去除掉p元素的ul類樣式。
切換樣式toggleClass()方法,使用該方法切換目標元素的樣式,方法以下:$(element).toggleClass();例:
$("p").toggleClass("ul");該方法來回切換【添加刪除實現切換】元素p的樣式ul.
判斷元素是否使用了樣式$(element).hasClass(),方法以下:$(element).hasClass(class);例:
alert($("p").hasClass("ul"));打印出p元素是否有ul樣式。
PS:addClass()和attr()方法設置樣式的不一樣,attr方法把元素的屬性名對應的屬性值設爲方法中的參數值,addClass()則把屬性值
添加到屬性名對應的屬性值中。例:已有元素<p class='class1'>元素樣式</p>,使用attr()和addClass()分別添加新樣式。
$("p").attr("class","another").結果是<p class='another'>元素樣式</>
$("p").addClass("class","another")結果是<p class='class1 another'>元素樣式</p>
html()方法得到或設置某個元素的html元素。方法以下:$(selector).html();例:
$("p").html();該示例得到元素p的html內容。
$("p").html("<strong>添加html內容</strong>");該示例設置p的html內容爲」<strong>添加html內容</strong>「;
PS:該方法能夠用於XHTML文檔,不能用於XML文檔。
text()方法得到或設置某個元素的文本值。方法以下:$(selecotr).text();例:
$("p").text();該示例得到元素p的text文本內容。
$("p").text("從新設置的文本內容");該示例設置元素p的text文本爲"從新設置的文本內容";
PS:該方法對html和XML文檔都適用。
val()方法得到或設置某個元素的值,若是元素值是多選則以數組形式返回,方法以下:$(selector).val();例:文本元素
<input type="text" id="userName" value="請輸入用戶名" />
$("#userName").val();得到input元素的值。
$("#userName").val('響馬');設置input元素的值爲'響馬'。
val()方法的不只能操做input,最重要的一個用途用於select【下拉列表框】、checkbox【多選框】、radio【單選框】。例:在下拉框下的多選賦值應用<select id="fruits" multiple="multiple"><option>蘋果</option><option>香蕉</option><option>西瓜</option></select>
$("#fruits").val(['蘋果','香蕉']);該示例使select中蘋果和香蕉兩項被選中。
children()方法用於取得匹配元素的子元素集合,只匹配子元素不考慮任何後代元素。方法以下:$(selector).children();例:
$("$("body").children().length;該示例得到body元素的子元素個數;
next()方法用於匹配元素的下一個兄弟節點,方法以下:$(selector).next();例:
$("p").next().html();該示例得到p元素的下一個兄弟節點的html內容。
prev()方法用於匹配元素的上一個兄弟節點,方法以下:$(selector).prev();例:
$("ul").prev().text();該示例得到ul元素的上一個兄弟節點的文本內容。
siblings方法()用於匹配目標元素的全部兄弟元素,方法以下:$(selector).siblings();例:
$("p").slibings();示例得到p元素的全部兄弟節點元素。
closest()方法()用來取得最近的匹配元素,首先檢查當前元素是否匹配若是匹配則直接返回,不然繼續向上查找父元素中符合條件的元素返回,若是沒有匹配的元素則返回空JQuery對象。
css()方法用於獲取、設置元素的一個或多個屬性。方法以下:$(selector).css();例:
$("p").css("color","red");該示例用於設置元素的顏色屬性爲紅色;
$("p").css("color")該示例用於得到元素的color樣式值;
$("p").css({"font-size":"30px","backgroundColor","#888888"});該示例用於設置元素的多個樣式。
offset()方法用於獲取元素相對當前窗體的偏移量,其返回對象包括兩個屬性:top和left。方法以下:$(selector).offset()
var offset= $("p").offset(); var left=offset.left;var top=offset.top;該示例用於得到元素p的偏移量。
PS:offset()只對可見元素有效。
position()方法用於獲取元素於最近的個position樣式屬性設置爲relative或者absolute的祖交節點的相對偏移量。方法以下:$(selector).position();例:
var postion = $("p").positon();var left=positon.left;var top=positon.top;該示例用於得到元素p的位置。
scrollTop()和scrollLeft()方法用於獲取元素的滾動條距頂端的距離和距左側的距離。方法以下:$(selector).scrollTop();$(selector).scrollLeft();例:
var scrollTop=$("p").scrollTop();var scrollLeft=$("p").scrollLeft();該示例用於得到元素的滾動條的位置。
也能夠添加參數將元素滾動到指定的位置。例:
$("textarea").scrollTop(300);$("textarea").scrollLeft(300);