JQuery DOM基本操作
生活随笔
收集整理的這篇文章主要介紹了
JQuery DOM基本操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DOM操作的分類 DOM Core 并不專屬于javascript,任何一種支持DOM的程序設計語言都可以使用它。 它的用途并非僅限與處理網頁,也可以用來處理任何一種使用標記語言編寫出來的文檔。例如XML javascript中的getElementById(),getElementByTagName(),getAttribute()和setAttribute()等方法,這些都是Dom Core的組成部分。 使用DOM Core來獲取表單對象的方法 ?document.getElementByTagName("from"); 使用DOM Core來獲取某元素的src屬性的方法: ?element.getAttribute("src"); 構建DOM元素 <body> ??<p title="選擇你最喜歡的水果">你最喜歡的水果是?</p> ??<ul> ????<li title='蘋果'>蘋果</li> ????<li title='橘子'>橘子</li> ????<li title='菠蘿'>菠蘿</li> ??</ul> </body> 使用jQeruy在文檔數上查找節點非常容易,可以通過在第2章介紹的jQuery選擇器來完成。 ???1.查找元素節點 ????獲取元素節點并打印出它的文本內容,jQuery代碼如下: ????var $li = $("ul li:eq(1)");?? 獲取<ul>里第2個<li> 節點 ????var li_txt=$li.text();??????? //獲取第2個<li>元素節點的文本內容 ????alert(li_txt);??????????????? //打印文本內容,這里會打印出橘子 ????? ????以上代碼獲取了<ul>元素里第2個<li>節點,并將它的文本內容"橘子"打印出來 ???2.查找屬性節點 ???利用jQuery 選擇器查找到需要的元素后,就可以使用attr()方法來獲取它的各種屬性的值.attr()方法得參數可以是一個,也可以是兩個。當參數是一個時,則是要查詢的屬性的名字。 ???獲取屬性節點并打印出它的文本內容,jQuery代碼如下: ???var $para = $("p");??? //獲取<p>節點 ???var p_txt=$para.attr("title");? //獲取<p>元素節點屬性title ???alert(p_txt);??? //打印title屬性值 ?創建節點 ??在dom 操作中,常常需要動態創建HTML內容,是文檔在瀏覽器里面的呈現效果發生變法,并且達到各種各樣的人機交互的目的。 ??1. 創建元素節點 ??例如要創建兩個<li>元素節點,并且要把它們作為<ul>元素節點的子節點添加到DOM節點樹上。 ??(1)創建兩個<li>新元素。 ??(2)將這兩個新元素插入文檔中。 ???第(1)個步驟可以使用jQuery的工廠函數$()來完成。 ???$(html); ???$(html)方法會根據傳入的HTML標記字符串,創建一個DOM對象,并將這個DOM對象包裝成一個jQuery對象后返回。 ???首先創建兩個<li>元素,jQuery代碼如下:?? ???$("ul").append($li_1);?? //添加到<ul>節點中,使之能在網頁中顯示 ???$("ul").append($li_2);?? //可以采取鏈式寫法:$("ul").append($li_1).append($li_2); ?????注意事項: ???????(1)動態創建的新元素節點不會被自動添加到文檔中,而是需要使用其他方法將其插入文檔中。 ???????(2)當創建單個元素時,要注意閉合標簽和使用標準的XHTML格式。 ????????例如創建一個<p> 元素,使用$("<p/>")或者("<p></p>"),但是不要使用$("<p>")或者大寫的$("<P/>"); ???2.創建文檔節點 ???var $li_1= $("<li>香蕉</li>");? //創建一個<li> 元素,包括元素節點和文本節點,香蕉就是創建的文本節點 ???var $li_2 =$("<li>雪梨</li>");? //創建一個<li> 元素,包括元素節點和文本節點,雪梨就是創建的文本節點。 ???$("ul").append($li_1);????????? //添加到<ul>節點中,使之能在網頁中顯示 ???$("ul").append($li_2);????????? //添加到<ul>節點中,使之能在網頁中顯示 ???以上代碼所示,創建文本節點就是在創建元素節點時直接把文本內容寫出來,然后使用append()等方法將他們添加到文檔中就可以了。 ??????注意事項: ???????無論$(html)中的HTML代碼多么復雜,都要使用相同的方式來創建。 ???????例如$("<li><em>這是</em><b>一個</b><a href='#'>復雜的組合</a></li>"); ???3.創建屬性節點 ????創建屬性及節點與創建文本節點類似,也是直接在創建元素節點時一起創建。 ????jQuery代碼如下: ????var $li_1=$("<li title='香蕉'>香蕉</li>");//創建一個<li>元素,包含元素節點,文本節點和屬性節點 其中title='香蕉'就是創建的屬性節點 ????var $li_2=$("<li title='雪梨'>雪梨</li>");//創建一個<li>元素 包括元素節點,文本節點和屬性節點,其中title=‘雪梨’就是創建的屬性節點 ????$("ul").append($li_1); ????$("ul").append($li_2); //添加到<ul> 節點中,使之能在網頁中顯示 ????? ????插入節點 ????動態創建HTML元素并沒有世界用處,還需要將新創建的元素插入文檔中,將新創建的節點插入文檔最簡單的辦法是,讓它成為這個文檔的某個節點的子節點。 ????使用append(),它會在元素內部追加新創建的內容。 ????? ????jQuery中還有提供了其他幾種插入節點的方法。 ????? ?????方法?????????????????? 描述?????????????????????????????????? 示例 ??append()???????? 向每個匹配的元素內部追加內容???????????????? HTML代碼? ?????????????????????????????????????????????????????????????<p>我想說:</p> ?????????????????????????????????????????????????????????????jQuery代碼: $("p").append("<b>你好</b>");? 結果: <p>我想說:<b>你好</b></p> ??appendTo()?????? 將所有匹配的元素追加到指定的元素中, ???????????????????實際上,使用該方法是顛倒了常規的$(A).append(B)的操作,即不是將B追加到A中,而是將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前置到B中。HTML 代碼 <p>我想說:</p>? jQuery代碼: $("<b>你好</b>").prependTo("p"); 結果<p><b>你好</b>我想說<p> ??after()????????? 在每個匹配的元素之后插入內容???? HTML代碼 <p>我想說:<p> jQuery代碼: $("p").after("<b>你好<b>"); 結果: <p>我想說:</p><b>你好</b> ??insertAfter()??? 將所有匹配的元素插入到指定元素的后面,與after()顛倒了???????? HTML代碼<p> 我想說</p> jQuery代碼:$("<b>你好</b>").insertAfter("p"); 結果<p>我想說:</p><b>你好</b> ??? ??before()???????? 將每個匹配的元素之前插入內容????????????? HTML代碼 <p>我想說:</p>? jQuery 代碼:$("p").before("<b>你好</br>");? 結果<b>你好</b>我想說:</p> ??insertBefore()?? 將所有匹配的元素插入到指定的元素的前面,實際上,使用該方法是顛倒了常規的before的操作?? $("<b> 你好</b>").insertBefore("p"); 結果:<b>你好</b><p>我想說:</p> ??刪除節點 ??如果文檔中某一個元素多余,那么應將其刪除,jQuery提供了兩種刪除節點的方法,即remove() 和empty() ?? ??1.remove()方法 ???作用是從DOM中刪除所有匹配的元素,傳入的參數用于根據jQuery表達式類篩選元素。 ???? ???例如刪除圖3-11中<ul>節點中的第2個<li>元素節點,jQuery代碼如下: ???$("ul li:eq(1)").remove();//獲取第2個<li>元素節后,將它從網頁中移除 ???當某個節點用remove()方法刪除后,該節點所包含的所有后代節點將同時被刪除,這個方法得放回值是一個指向已被刪除的節點的引用,因此可以在以后再使用這些元素。 ???下面的jQuery代碼說明元素用remove()方法刪除后,還是可以繼續使用的。 ???var $li = $("ul li:eq(1)").remove();//獲取第2個<li>元素節點后,將它從網頁中刪除 ???$li.appendTo("ul");//把剛刪除的節點又重新添加到<ul>元素里 ???可以直接使用appendTo()方法得特性來簡化以上代碼: ???$("ul li:eq(1)").appendTo("ul"); ???//appendTo()方法也可以用來移動元素 ???//移動元素時首先從文檔上刪除此元素,然后將該元素插入得到文檔中的指定節點。 ???另外remove()方法也可以通過傳遞參數來選擇性地刪除元素 ???$("ul li").remove("li[title!='菠蘿']"); //將<li>元素屬性title不等于"菠蘿" 的<li>元素刪除。 ??? ???2.empty()方法 ???嚴格來講,empty()方法并不是刪除節點,而是清空節點,它能清空元素中的所有后臺節點。 ???$("ul li:eq(1)").empty();? //獲取第2個<li>元素節點后,清空此元素里的內容,注意是元素里面。 ???使用firebud查看橘子節點發生變化? <li title='橘子'/> ??? ???3.復制節點 ????復制節點也是常用的DOM操作之一,例如購入車,用戶不僅可以通過單擊商品下方的選擇按鈕購買相應的產品,也可以通過鼠標拖動商品 ????并將其放到購物車中,這個商品拖動功能就是用的復制節點,將用戶選擇的商品所處的節點元素復制一次,并將其跟隨鼠標移動,從而達到以下購物車的效果 ????$("ul li").click(function(){ ?????$(this).clone().appendTo("ul");//復制當前單擊的節點,并將它追加到<ul>元素中 ???}); ???//在頁面中點擊"菠蘿"后,列表最下方出現新節點"菠蘿"。 ???$(this).clone(true).appendTo("body");//注意參數true ???在clone()方法傳遞了一個參數true,它的含義是復制元素的同時復制元素中所綁定的事件,因此該元素的副本也同樣具備復制功能。 ???替換節點 ???如果要替換某個節點,jQuery提供了相應的方法,即replaceWith和 replaceAll() ???replaceWith()方法得做喲偶那個是將所有匹配的元素都替換成指定的HTML或者DOM元素。 ???例如要將網頁中<p title="選擇你最喜歡的水果">你最喜歡的水果是?</p> 替換成<strong> 你最不喜歡的水果是?</strong> 可以使用如下jQuery代碼: ?????$("p").replaceWith("<strong>你最不喜歡的水果是?"); ?????也可以使用jQuery中另一個方法repalceAll()來實現,該方法與replaceWith()方法得作用相同,只是顛倒了replaceWith的操作。 ?????$("<strong>你最不喜歡的水果是?</strong>").replaceAll("p"); ?????注意: ???????如果在替換之前,已經為元素綁定了事件,替換后原先綁定的事件將會與被替換的元素一起消失,需要在新元素上重新綁定事件。 ??4. 包裹節點 ?????如果要將某個節點用其他標記包裹起來,jQuery提供了相應的方法,wrap(),該方法對于需要在文檔中插入額外的結構化標記非常有用,而且不會破壞原始文檔的語義。 ?????jQuery代碼如下: ?????$("strong").wrap("<b></b>");//用<b>標簽把<strong> 元素包裹起來 ?????得到的結果如下:? ?????<b><strong title="選擇你最喜歡的水果"> 你最喜歡的水果是?</strong></b> ?????? ?????1.wrapAll()方法 ?????該方法將會將所有匹配的元素用一個元素包裹。它不同于wrap()方法,wrap()方法將所有的元素進行單獨的包裹。 ?????$("strong").wrap("<b></b>"); ?????? ?????2.wrapinner()方法 ?????該方法將每一個匹配的元素的子內容(包括文本節點) 用其他結構化的標記包裹起來,例如可以使用它來包裹<strong> 標簽的子內容:jQuery代碼如下: ?????$("strong").wrapInner("<b></b>"); ?????運行代碼后,發現<strong>標簽內的內容被一對<b>標簽包裹了。 ?????<strong title="選擇你最喜歡的水果"><b>你最喜歡的水果是?</b></strong> ?????屬性操作 ?????在jQuery 中,用attr() 方法來獲取和設置元素屬性,removeAtt() 方法來刪除元素屬性。 ?????1.獲取屬性和設置屬性 ???????如果要獲取<p>元素的屬性title,那么只需要給attr()方法傳遞一個參數,即屬性名稱。 ?????var $para=$("p");?????????????? //獲取<p>節點 ?????var p_txt=$para.attr("title");? //獲取<p>元素節點屬性title ????? ?????如果要設置<p>元素的屬性title的值,也可以使用同一個方法,不同的是,需要傳遞兩個參數即屬性名稱和對應的值。 ?????jQuery代碼如下: ?????$("p").attr("title","your title");//設置單個的屬性值 ?????//為同一個元素設置多個屬性值 ?????$("p").attr({"title":"your title","name":"test"});//將一個 "名值" 形式的對象設置為匹配元素的屬性。 ????? ??????jQuery中的很多方法都是同一個函數實現獲取(getter)和設置(setter)的,例如上面的attr()方法,即能設置元素屬性的值,也能獲取元素屬性的值,類似的還有html(),text(),height(),width(),val(),css()等方法。 ?????? ????2.刪除屬性 ??????有時候需要刪除文檔元素的特定屬性,可以使用removeAttr()方法 ??????刪除<p>元素的title屬性 ??????$("p").removeAttr("title"); ???? ????操作樣式 ????獲取樣式和設置樣式 ????HTML代碼如下: ????<p class="myclass" title="選擇你最喜歡的水果"> 你最喜歡的水果是?</p> ????class 也是<p>元素的屬性,因此獲取class 和設置class都可以使用attr()方法。 ????var p_class = $("p").attr("class");//獲取<p>元素的class ????可以使用attr()方法來設置<p>元素的class,jquery代碼如下: ????$("p").attr("class","high");//設置<p>元素的class為high ????他是將原來的class替換為class,而不是在原來的基礎上追加新的class ????追加樣式 ????jQuery提供了專門的addClass()方法來追加樣式,為了使例子更為容易理解,首先在<style>標簽里添加另一組樣式 ????<style> ????.high{ ?????font-weight:bold; ?????color:red; ????} ?????? ????.another{ ?????font-style:italic; ?????color:blue; ????} ???//在網頁中追加class類的按鈕.? ???$("input:eq(2)").click(function(){ ???$("p").addClass("another"); //給<p>元素追加"another"類 ???}) ???attr() 和addClass()的區別 ???用途?????????????????????? 追加樣式???????????????????????? 設置樣式? 對同一個網頁元素操作?????? <p>test</p>???????? 第一次使用方法???????????? $("p").addClass("high");???????????? $("p").attr("class","high"); 第1次結果????????????????? <p class="high">test</p>? 再次使用方法?????????????? $("p").addClass("another");????????? $("p").attr("class","another"); 結果?????????????????????? <p class="high another"> test</p>??? <p class="another"> test</p> 3移除樣式 如果單擊某一個按鈕時,刪除class的某個值,那么可以使用addClass()方法相反的removeClass()方法來完成,它的作用是從匹配的元素中刪除全部或者指定的class 如下jQuery代碼來刪除 ?$("p").removeClass("high");//移除<p>元素中為"high"的class ?//如果要把<p>元素的兩個class都刪除,就要使用removeClass() ?$("p").removeClass("high").removeClass("another"); ?//jquery提供了更簡單的方法 ?$("p").removeClass("high another"); ?另外,還可以使用removeClass()方法得一個特性來完成同樣的效果,它不帶參數的時候會將 class的值全部刪除. ?$("p").removeClass(); ?切換樣式 ?$toggleBtn.toggle(function(){ ???//3 ?},function(){ ???//4 ?}); ?toggle()方法此處的作用是交替執行代碼3和4兩個函數,如果元素原來是顯示的,則隱藏它,如果隱藏的,則顯示它,此時,toggle()方法主要是控制行為上的重復切換。 ?? ?判斷是否含有某個樣式 ?hasClass可以用來判斷元素中是否有某個class,如果有,則返回true,否則返回false ?$("p").hasClass("another"); ?//jQuery內部實際上是調用了is()方法來完成這個功能的,該方法等價于 ?$("p").is(".another") ?1.設置和獲取HTML,文本和值 ?html()方法 ?$("P").html();//獲取元素的html代碼 ?2.text() 方法 ?$("p").text(); //獲取<p>元素的文本內容 ?//text()可以對文本內容設置內容 ?$("p").text("你最喜歡的水果是?"); //設置<p>元素的文本內容 ?3.val()方法 ?val()方法取值 ?通過上面的例子可以發現val()方法不僅能設置元素的值,同時也能獲取元素的值,另外val() 方法還有另外一個用處,就是它能select(下拉列表框),checkbox(多選框)和radio(單選框) 相應的選項被選中,在表單操作中會經常用到。 ?//使用val設置選中項 ?$("#single").val("選擇2號"); ?//如果要使下拉列表的第2項和第3項被選中 ?$("#multiple").val(["選擇2號","選擇3號"]); //以數組的形式賦值 ?使多個文本框被選中 ?$(":checkbox").val(["check2","check3"]); ?$(":radio").val(["radio2"]); ?也可以使用attr()方法來實現同樣的功能 ?$("#single option:eq(1)").attr("selected",true);? //設置屬性selected ?$("[value=radio2]:radio").attr("checked",true); 1? children()方法 ?該方法用于取得匹配元素的子元素集合 ?var $body = $("body") .children(); ?var $p=$("p").children(); ?var $ul = $("ul").children(); ?alert($body.length); ?alert($p.length); ?alert($ul.length); 2.next方法 ?該方法用于取得匹配元素后面緊鄰的同輩元素。 ?從dom樹的結構可以知道<p>元素的下一個同輩節點時<ul>,因此可以通過next() 方法來獲取<ul> 元素 ?var $p1 = $("p").next();//取得緊鄰<p>元素后的同輩元素 ?<ul> ???<li title='蘋果'>蘋果</li> ???<li title='橘子'>橘子</li> ???<li title='菠蘿'>菠蘿</li> ?</ul> ?prev()方法 ?該方法用于取得匹配元素前面緊鄰的同輩元素。 ?從DOM樹的結構中可以知道<ul>元素的上一個同輩節點時<p>,因此可以通過prev()方法類獲取<p>元素 ?var $ul = $("ul").prev();? //取得緊鄰<ul>元素前得同輩元素 ?得到的結果將是: ?<p title="選擇你最喜歡的水果">你最喜歡的水果是?</p> ?4.siblings()方法 ?該方法用于取得匹配元素前后所有的同輩元素。 ?在第1章導航欄的例子中有段代碼如下: ??$(".has_children").click(function() { ???$(this).addClass("highlight");? //為當前元素增加highlight類 ???.children("a").show().end() ???.siblings().removeClass("highlight") ???.children("a").hide(); }) ??
轉載于:https://www.cnblogs.com/MMLoveMeMM/articles/3555145.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的JQuery DOM基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript:void到底是个什
- 下一篇: 基于asp.net + easyui框架