第3章 jQuery的DOM操作

来源:http://www.cnblogs.com/djtao/archive/2016/09/30/5924295.html
-Advertisement-
Play Games

一. DOM 分為DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不專屬與javascript。 獲取對象:document.getElementsByTagName('div') 獲取屬性:elem.getAtrribute('title') 2.html-DOM document. ...


一.  DOM

分為DOM核心,HTML-DOM和CSS-DOM

1.DOM核心

不專屬與javascript。 獲取對象:document.getElementsByTagName('div') 獲取屬性:elem.getAtrribute('title')

2.html-DOM

document.div elem.src

3.CSS-DOM

elem.style.color='red'  

二. jQuery的DOM操作

1.查找節點

(1)元素節點

1 2 alert($('ul li:eq(1)').text); //獲取ul中第2個li內文檔內容

(2)屬性節點:使用attr()方法

1 2 alert($('p').attr('title')); //獲取p元素的title值(如果有的話)

2.創建節點

(1)元素節點

創建節點可以直接使用jQuery的工廠函數

$('HTML代碼');

添加節點使用

jq父親對象.append(jq子對象)

【例3.1】創建兩個li元素並添加到節點上

1 2 3 4 5 6 <ul id="list">     <h4>你喜歡的水果是</h4>     <li>蘋果</li>     <li>橘子</li>     <li>菠蘿</li> </ul>

jq

1 2 3 4 5 6 7 8 $(document).ready(function(){     var $oLi1=$('<li>雪梨</li>');     var $oLi2=$('<li>柿子</li>');     //以上就直接創建了兩個對象     $('#list').append($oLi1);     $('#list').append($oLi2);     //添加到節點,也可以使用鏈式寫法 })

(2)創建文本節點

直接寫進去就行

$('HTML代碼');

(3)創建屬性節點

也是直接把屬性(比如title寫入到html中)

 

1 $("<li tilte='apple'>蘋果</li>")

3. 插入節點

方法 釋義 示例 備註
append() 在匹配元素的內部追加內容,在父元素內部最後面 jq父對象.append(jq子對象) 類似js里的appendChild()方法
appendTo() 顛倒了常規的append方法,在父元素內部最後面 jq子對象.appendTo(jq父對象)  
preppend() 向每個匹配元素內部前置內容,在父元素內部最前 jq父對象.preppend(jq子對象)  
preppendTo() 顛倒的preppend方法 jq子對象.preppendTo(jq父對象)  
after() 在每個匹配目標元素之後加入內容 jq目標元素.after(jq操作對象)  
insertAfter() 顛倒了after方法 jq操作對象.insertAfter(jq目標對象)  
before 在每個匹配目標元素之前加入內容 jq目標元素.before(jq操作對象)  
insertBefore() 顛倒的before方法 jq操作對象insertBefore(jq目標對象)  
DOM的節點是可以用上述方法來移動的,如果操作的是一個已有所屬的dom元素,那麼它將從一個所屬元素的父級移出。按照方法的規則重新排位。

 

4.刪除節點

(1)remove()

$xxx.remove()——刪除xxx節點remove裡面可以跟選擇器

【例3.2】篩選搜索結果

1 2 3 4 5 6 7 <input id="btn1" type="button" value="搜索"/> <ul id="list">           <li>蘋果</li>     <li>橘子</li>     <li title="菠蘿">菠蘿</li> </ul>

js

1 2 3 4 5 6 $(document).ready(function(){       $('#btn1').click(function(){         $('ul li').remove("li[title!=菠蘿]")     }) })

(2)detach()方法

和remove類似,但萬一以後重新創建,相應綁定的方法和操作都會保留

(3)empty

清空元素里的內容,但不刪除節點

 

5.複製節點——clone()方法

被覆制的節點無任何行為,如果要具有同樣的功能可以調用clone方法的參數true

1 $(this).clone(true).appendTo('body');

 

6. 替換節點

通過重新給節點賦值的方法,似乎不能生效

(1)replaceWith()

1

$('div>p').replacrWith('<strong>你不喜歡的水果是?</strong>')

以上案例把div下,p內的後代換成了新定義的html語句

(2)replaceAll()

1 $('<h1>你不喜歡的水果是?</h1>').replaceAll('p')

所有的p都會被換成新的html語句。

 

註意:替換後所有綁定的事件全部消失!

 

7. 包裹節點

把某個節點用一個標記包裹起來——wrap()

1 $('被標記對象的標簽').wrap('完整標記元素(包括閉合)')

所有被標記對象的標簽是單獨被一個標記元素所包裹——局限性還是有點大。

(1)wrapAll()方法

所有被標記對象的標簽是全部被一個標記元素所包裹。

(2)wrapInner

將每個匹配元素的子內容包括文本節點用設定的標記包裹

 

以上兩個方法格式和wrap方法相同

 

8.屬性操作

用attr獲取和設置屬性,removeAttr()來刪除屬性

(1)attr()方法

給所有p元素設置標題

 

1 $('p').attr('title','標題');

一次設置多個屬性:在每個屬性對中用逗號隔開,屬性對內改用冒號分隔。

1 $('選擇器').attr('屬性1':'值1','屬性2':'值2'....)

 

(2)removeAttr()方法

 

1 $('選擇器').removeAttr('屬性1')

 

9. 樣式操作

(1)獲取設置樣式

比如,我要把所有p元素的class設置為“para”

1 $('p').attr('class','para')

這裡沿用的是attr方法。註意,這裡的設置是覆蓋全部class的,修改後只有唯一的clas——para。這對於佈局來說是很不友好的。所以不常用。

(2)追加class樣式——addClass()

1 $('p').addClass('para')

p 標記原有的class會被保留。當兩個class樣式衝突時,後面覆蓋前面

(3)移除樣式——removClass()

1 $('p').removeClass('para class1')

上面例子中,p元素的兩個className(para class1)都被刪掉了。不帶參數時,刪除所有className。

(4)切換樣式——toggle()方法——1.8+版本已廢棄

貌似挺好用的方法——但是toggleClass能運行在1.11+版本中

1 2 <input id="btn1" type="button" value="切換"/> <div id="div1" class="class1"></div>

存在兩個class樣式

1 2 3 4 5 6 7 8 9 10 11 12 #div1{     width: 200px;height: 200px;       }   .class1{     background: yellow; }   .class2{     background: green; }

點擊按鈕來回切換顏色

1 2 3 4 5 $(document).ready(function(){     $('#btn1').click(function(){         $('#div1').toggleClass('class2')     }) })

 

(5)判斷是否含有某種樣式——返回的是一個布爾值

hasClass方法

1 $('p').hasClass('para')

作為判斷,jquery實際是調用了is函數

1 $('p').is('.para');

 

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

(1)html()方法

類似innerHTML方法

1 2 alert($('p').html()); //列印p標記內的html內容

在html()參數內設置html文本,可以改變p的內容

(2)text()方法

前面章節已經用過——類似innerText,不包含html結構內容。可以設置文本參數改變裡面的文本內容

(3)val()方法

相當於value。

【例3.3】登錄界面,滑鼠焦點移入時,value值消失,移除焦點時,value回覆。

提示:jq選擇器有$(':focus')方法——還有focus()事件——失去焦點:blur()

 

1 2 3 <input type="text" id="address" value="請輸入郵箱地址"/>   <br/><br/>     <input type="text" id="password" value="請輸入郵箱密碼"/>  <br/><br/>     <input type="button" value="登錄"/>

js:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $(document).ready(function(){     $('#address').focus(function(){         if($(this).val()=='請輸入郵箱地址'){             $(this).val('');         }     })       $('#address').blur(function(){         if($(this).val()==''){             $(this).val('請輸入郵箱地址');         }     })       $('#password').focus(function(){         if($(this).val()=='請輸入郵箱密碼'){             $(this).val('');         }     })       $('#password').blur(function(){         if($(this).val()==''){             $(this).val('請輸入郵箱密碼');         }     }) })

11. 遍歷節點

每個遍歷節點都可以加參數進行篩選。

(1)獲取匹配元素的子元素集合——children()方法

取得一個包含匹配的元素集合中每一個元素的所有子元素的元素集合。

可以通過可選的表達式來過濾所匹配的子元素。註意:parents()將查找所有祖輩元素,而children()只考慮子元素而不考慮所有後代元素。

可以用於遍歷

$aObj[i]

(2)next()方法

 

1 2 $('p').next() //獲取緊鄰p元素的下一個同輩元素

(3)prev()方法

獲取匹配元素緊鄰的前一個同輩元素

(4)sibling()方法

獲取匹配元素後緊鄰的所有同輩元素

(5)closest

獲取最近的匹配元素

 

1 $('.para').closest('li')

如上,class為para的標記靠的最近的那個li元素——按輩分算。

【註意區別parent,parents和closest】

 

12. CSS-DOM操作

利用jq提取外部樣式的屬性,這是最大的優勢。因此隆重推出css()方法

無論外部樣式是怎樣關聯的,css()都可以獲取!

css()可以直接給元素設置樣式!

和attr方法一樣,css()可以直接一次性改變多個屬性!

1 $('p').css('background':'white','color':red,'opacity':0.5,......)

 

註意

a. font-size之類的屬性可以不加引號——但是必須寫成fontSize。

b. opacity可以直接用,jq已經處理好了相容性。

c. css()也可以獲取高度,但是那隻是樣式所說的靜態高度。獲取計算後的高度是用xxx.height(),相對應的是width()方法。

佈局常用方法:

(1)offset()

返回的是top和left兩個屬性值。

1 2 $('p').offset().left //獲取p元素的offsetLeft。

left,top僅僅是獲取。不帶參數

(2)position方法

返回的是相對於做了定位的先代元素的偏移——假如操作對象的定位為絕對。

1 2 $('p').position().left //獲取p元素的left值

(3)scrollTop()和scrollLeft()方法

滾動條距離頂端和距離左側的長度

1 2 $('p').scrollTop(300).scrollLeft(300); //p元素始終在滾動條滾動到指定位置時出現。


【久違的大案例】某網站超鏈接和圖片顯示效果

【1】超鏈接提示效果

現代瀏覽器中,可以通過title實現超鏈接懸停提示的效果。如

1 <a href="javascript:;" title="我是提示">提示demo</a>

這種提示效果相當慢。試著寫出一個js模擬這種效果

(1)滑鼠滑入超鏈接:創建一個div,內容為title值,追加到文檔中,設置位置跟隨滑鼠

(2)移出超鏈接,移除div。

難點

(1)完全跟隨滑鼠指針被遮擋可能觸發onmouseout,要設置一定的偏離

(2)消除瀏覽器自帶的顯示效果(已證明return false不行)。

佈局

1 2 3 4 <p><a href="#" class="tooltip" title="這是我的超鏈接提示1.">提示1.</a></p> <p><a href="#" class="tooltip" title="這是我的超鏈接提示2.">提示2.</a></p> <p><a href="#" title="這是自帶提示1.">自帶提示1.</a></p> <p><a href="#" title="這是自帶提示2.">自帶提示2.</a></p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 body{     margin:0;     padding:40px;     background:#fff;     font:80% Arial, Helvetica, sans-serif;     color:#555;     line-height:180%;     position: relative; } p{     clear:both;     margin:0;     padding:.5em 0; }   .tips{     position:absolute;     border:1px solid #333;     background:#f5f5f5;     padding:1px;     color:#333;     width: 100px; }

我們把要產生div的樣式寫到一個tips里。

懂js是基礎,所以先考慮原生js的實現方式

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 興趣所致研究一下HashMap的源碼,寫下自己的理解,基於JDK1.8。 本文大概分析HashMap的put(),get(),resize()三個方法。 首先讓我們來看看put()方法。 1.首先通過hash(key)計算key的hash值 2.由於hashMap實際存儲數據的就是table數組,那 ...
  • 成員變數指針 解引用: 成員變數指針存的不是絕對的地址,而是成員變數相對與對象開頭地址的長度,解引用時根據對象的起始地址和成員變數指針中存放的相對地址,計算其目標成員的絕對地址,這樣就可以訪問成員變數了 例子 成員函數指針 通過成員函數指針調用函數 Note: 成員函數指針存儲的就是特定函數的在代碼 ...
  • 靜態成員變數 1. static成員變數是類級變數(用來處理這中類型的對象,共用的數據,屬於整個類型,記憶體中只有一份)。和全局變數以及靜態局部變數一樣,存放在進程的靜態存儲區(數據區+BSS區)。 2. 靜態成員變數必須在類外進行初始化, 不能在構造函數中初始化 例子 include using n ...
  • 一直希望能夠搭建一個完整的,基礎Web框架,方便日後接一些外快的時候,能夠省時省力,終於花了一周的時間,把這個東西搞定了。特此寫下此博客,一來是紀念,二來是希望能夠為別人提供方便。 ...
  • 回到目錄 知識點 本文是一個很另類的文章,在項目中用的比較少,但如果項目中真的出現了這種情況,我們也需要知道如何去解決,對於知識點StringContent和FormUrlEncodedContent我們應該瞭解的多一點,FormUrlEncodedContent是以鍵/值對的形式進行POST數據的 ...
  • A.優化站點資源 速度很重要。用戶很關心。我們的站點必須載入夠快,否則用戶就會走人。SEO 也很重要。我們的站點必須載入夠快,否者搜索排名就會下降。 明白了這樣,我們就來清點一下 【Bootstrap】2.作品展示站點 中的資源。特別的,來看一看我們能控制的、影響頁面速度的重要因素 —— 文件大小, ...
  • 標準文檔流 將窗體自上而下分成一行行, 併在每行中按從左至右的順序排放元素,即為文檔流.每個非浮動塊級元素都獨占一行, 浮動元素則按規定浮在行的一端. 若當前行容不下, 則另起新行再浮動. 標準流的微觀現象 空白摺疊現象 圖片也是一樣,圖片和表單元素可以看成是文字 高矮不齊,底邊對齊 自動換行,一行 ...
  • 用到過PDF的媛媛and猿猿們,總會發現這大千世界之萬能播放器插件,總能少了對媒體控制的介面。 你總會發現PDF無法像img圖片一樣正常載入展現出來,那麼我們在通用語法的基礎上拓展出了適用於預覽及打開的PDF插件便於開發應用。 最主要的是使用到了一個jquery的插件jquery.media.js, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...