jQuery知識總結之元素屬性與樣式的操做

       本篇文章梳理一下jQuery中獲取、增長、移除元素的屬性;獲取、添加元素的文本內容以及操做元素的樣式。css

jQuery元素的屬性操做---.attr()與.removeAttr()

       原生js中操做特性的DOM方法主要有3個,getAttribute方法、setAttribute方法和removeAttribute方法,就算如此在實際操做中仍是會存在不少問題。而在jQuery中用attr()與removeAttr()就能夠所有搞定了,包括兼容問題。html

       jQuery中用attr()方法來獲取和設置元素屬性,attr是attribute(屬性)的縮寫,在jQuery DOM操做中會常常用到attr()。html5

attr()有4個表達式node

  1. attr(傳入屬性名):獲取屬性的值
  2. attr(屬性名, 屬性值):爲匹配的元素集合中的每一個元素設置屬性的值
  3. attr(屬性名,函數值):爲匹配的元素集合中的每一個元素設置屬性的函數值
  4. attr(attributes):爲匹配的元素集合中的每一個元素設置多個屬性值,attribute格式以下:{屬性名一: 「屬性值一」 , 屬性名二: 「屬性值二」 , … … }

removeAttr()刪除方法jquery

.removeAttr( attributeName ) : 爲匹配的元素集合中的每一個元素中移除一個屬性(attribute)windows

注意的問題:數組

dom中有個概念的區分:Attribute和Property翻譯出來都是「屬性」,《js高級程序設計》書中翻譯爲「特性」和「屬性」。簡單理解,Attribute就是dom節點自帶的屬性瀏覽器

例如:html中經常使用的id、class、title、align等:緩存

<div id="demo" title="實例"></div>
複製代碼

而Property是這個DOM元素做爲對象,其附加的內容,例如,tagName, nodeName, nodeType,, defaultChecked, 和 defaultSelected,原生js中咱們能夠獲取DOM節點而後控制檯打印DOM節點.__proto__能夠 查看。性能優化

在jQuery中咱們可使用.prop()方法進行取值或賦值等。

獲取Attribute就須要用attr,獲取Property就須要用prop

jQuery元素HTML結構與文本內容的操做---.html()及.text()

       讀取、修改元素的html結構或者元素的文本內容是常見的DOM操做,jQuery針對這樣的處理提供了2個便捷的方法.html()與.text()

.html()方法 

 獲取集合中第一個匹配元素的HTML內容 或 設置每個匹配元素的html內容

具體有3種用法: 

  1.  .html() 不傳入值,就是獲取集合中第一個匹配元素的HTML內容 
  2. .html( htmlString ) 設置每個匹配元素的html內容 
  3. .html( function(index, oldhtml) ) 用來返回設置HTML內容的一個函數 

注意事項:  

       .html()方法內部使用的是DOM的innerHTML屬性來處理的,因此在設置與獲取上須要注意的一個最重要的問題,這個操做是針對整個HTML內容(不只僅只是文本內容)

.text()方法

獲得匹配元素集合中每一個元素的文本內容結合,包括他們的後代,或設置匹配元素集合中每一個元素的文本內容爲指定的文本內容。

具體有3種用法:

  1. .text() 獲得匹配元素集合中每一個元素的合併文本,包括他們的後代
  2. .text( textString ) 設置每個匹配元素內容的文本
  3. .text( function(index, text) ) 用來返回設置文本內容的一個函數

注意事項:

.text()結果返回一個字符串,包含全部匹配元素的合併文本


.html與.text的異同:

  1. .html與.text的方法操做是同樣,只是在具體針對處理對象不一樣
  2. .html處理的是元素內容,.text處理的是文本內容
  3. .html只能使用在HTML文檔中,.text 在XML 和 HTML 文檔中都能使用
  4. 若是處理的對象只有一個子文本節點,那麼html處理的結果與text是同樣的
  5. 火狐不支持innerText屬性,用了相似的textContent屬性,.text()方法綜合了2個屬性的支持,因此能夠兼容全部瀏覽器

jQuery的屬性與樣式之.val()

jQuery中有一個.val()方法主要是用於處理表單元素的值,好比 input, select 和 textarea。

.val()方法

  1. .val()無參數,獲取匹配的元素集合中第一個元素的當前值
  2. .val( value ),設置匹配的元素集合中每一個元素的值
  3. .val( function ) ,一個用來返回設置值的函數

注意事項:

  1. 經過.val()處理select元素, 當沒有選擇項被選中,它返回null
  2. .val()方法多用來設置表單的字段的值
  3. 若是select元素有multiple(多選)屬性,而且至少一個選擇項被選中, .val()方法返回一個數組,這個數組包含每一個選中選擇項的值

multiple 屬性規定可同時選擇多個選項。<select multiple="multiple">

在不一樣操做系統中,選擇多個選項的差別:

  • 對於 windows:按住 Ctrl 按鈕來選擇多個選項
  • 對於 Mac:按住 command 按鈕來選擇多個選項

.html(),.text()和.val()的差別總結

  1. .html(),.text(),.val()三種方法都是用來讀取選定元素的內容;只不過.html()是用來讀取元素的html內容(包括html標籤),.text()用來讀取元素的純文本內容,包括其後代元素,.val()是用來讀取表單元素的"value"值。其中.html()和.text()方法不能使用在表單元素上,而.val()只能使用在表單元素上;另外.html()方法使用在多個元素上時,只讀取第一個元素;.val()方法和.html()相同,若是其應用在多個元素上時,只能讀取第一個表單元素的"value"值,可是.text()和他們不同,若是.text()應用在多個元素上時,將會讀取全部選中元素的文本內容。
  2. .html(htmlString),.text(textString)和.val(value)三種方法都是用來替換選中元素的內容,若是三個方法同時運用在多個元素上時,那麼將會替換全部選中元素的內容。
  3. .html(),.text(),.val()均可以使用回調函數的返回值來動態的改變多個元素的內容。

jQuery元素樣式的操做---.addClass() .removeClass() .toggleClass()

       在HTML結構中裏,多個class以空格分隔,當一個節點(或稱爲一個標籤)含有多個class時,DOM元素響應的className屬性獲取的不是class名稱的數組,而是一個含有空格的字符串,這就使得多class操做變得很麻煩。一樣的jQuery開發者也考慮到這種狀況,增長了一個.addClass()方法,用於動態增長class類名.

.addClass( className )方法

  1. .addClass( className ) : 爲每一個匹配元素所要增長的一個或多個樣式名
  2. .addClass( function(index, currentClass) ) : 這個函數返回一個或更多用空格隔開的要增長的樣式名

注意事項:

.addClass()方法不會替換一個樣式類名。它只是簡單的添加一個樣式類名到元素上。

jQuery經過.addClass()方法能夠很便捷的增長樣式。若是須要樣式之間的切換,一樣jQuery提供了一個很方便的.removeClass(),它的做用是從匹配的元素中刪除所有或者指定的class

.removeClass( )方法

  1. .removeClass( [className ] ):每一個匹配元素移除的一個或多個用空格隔開的樣式名
  2. .removeClass( function(index, class) ) : 一個函數,返回一個或多個將要被移除的樣式名

注意事項

若是一個樣式類名做爲一個參數,只有這樣式類會被從匹配的元素集合中刪除 。 若是沒有樣式名做爲參數,那麼全部的樣式類將被移除

jQuery元素樣式的操做---.css()

經過JavaScript獲取dom元素上的style屬性,咱們能夠動態的給元素賦予樣式屬性。在jQuery中咱們要動態的修改style屬性咱們只要使用css()方法就能夠實現了

.css() 方法:獲取元素樣式屬性的計算值或者設置元素的CSS屬性

獲取:

  1. .css( propertyName ) :獲取匹配元素集合中的第一個元素的樣式屬性的計算值
  2. .css( propertyNames ):傳遞一組數組,返回一個對象結果

設置:

  1. .css(propertyName, value ):設置CSS,會成爲內聯樣式
  2. .css( propertyName, function ):能夠傳入一個回調函數,返回取到對應的值進行處理
  3. .css( properties ):能夠傳一個對象,同時設置多個樣式

注意事項:

  1. 瀏覽器屬性獲取方式不一樣,在獲取某些值的時候都jQuery採用統一的處理,好比顏色採用RBG,尺寸採用px
  2. .css()方法支持駝峯寫法與大小寫混搭的寫法,內部作了容錯的處理
  3. 當一個數只被做爲值(value)的時候, jQuery會將其轉換爲一個字符串,並添在字符串的結尾處添加px,例如 .css("width",50}) 與 .css("width","50px"})同樣

jQuery的屬性與樣式之.css()與.addClass()設置樣式的區別

addClass與css方法,二者之間有什麼區別呢?

可維護性:

.addClass()的本質是經過定義個class類的樣式規則,給元素添加一個或多個類。css方法是經過JavaScript大量代碼進行改變元素的樣式

經過.addClass()咱們能夠批量的給相同的元素設置統一規則,變更起來比較方便,能夠統一修改刪除。若是經過.css()方法就須要指定每個元素是一一的修改,往後維護也要一一的修改,比較麻煩

靈活性:

經過.css()方式能夠很容易動態的去改變一個樣式的屬性,不須要在去繁瑣的定義個class類的規則。通常來講在不肯定開始佈局規則,經過動態生成的HTML代碼結構中,都是經過.css()方法處理的

樣式值:

.addClass()本質只是針對class的類的增長刪除,不能獲取到指定樣式的屬性的值,.css()能夠獲取到指定的樣式值。

樣式的優先級:

css的樣式是有優先級的,當外部樣式、內部樣式和內聯樣式同同樣式規則同時應用於同一個元素的時候,優先級以下

外部樣式 < 內部樣式 < 內聯樣式複製代碼
  1. .addClass()方法是經過增長class名的方式,那麼這個樣式是在外部文件或者內部樣式中先定義好的,等到須要的時候在附加到元素上
  2. 經過.css()方法處理的是內聯樣式,直接經過元素的style屬性附加到元素上的

經過.css方法設置的樣式屬性優先級要高於.addClass方法

總結:

.addClass與.css方法各有利弊,通常是靜態的結構,都肯定了佈局的規則,能夠用addClass的方法,增長統一的類規則 若是是動態的HTML結構,在不肯定規則,或者常常變化的狀況下,通常多考慮.css()方式

jQuery元素的數據存儲---.data()

html5 dataset是新的HTML5標準,容許你在普通的元素標籤裏嵌入相似data-*的屬性,來實現一些簡單數據的存取。它的數量不受限制,而且也能由JavaScript動態修改,也支持CSS選擇器進行樣式設置。這使得data屬性特別靈活,也很是強大。有了這樣的屬性咱們可以更加有序直觀的進行數據預設或存儲。那麼在不支持HTML5標準的瀏覽器中,咱們如何實現數據存取? jQuery就提供了一個.data()的方法來處理這個問題

使用jQuery初學者通常不是很關心data方式,這個方法是jquery內部預用的,能夠用來作性能優化,好比sizzle選擇中能夠用來緩存部分結果集等等。固然這個也是很是重要的一個API了,經常用於咱們存放臨時的一些數據,由於它是直接跟DOM元素對象綁定在一塊兒的

jQuery提供的存儲接口

jQuery.data( element, key, value )   //靜態接口,存數據
jQuery.data( element, key )  //靜態接口,取數據   
.data( key, value ) //實例接口,存數據
.data( key ) //實例接口,取數據複製代碼

2個方法在使用上存取都是通一個接口,傳遞元素,鍵值數據。在jQuery的官方文檔中,建議用.data()方法來代替。

咱們把DOM能夠看做一個對象,那麼咱們往對象上是能夠存在基本類型,引用類型的數據的,可是這裏會引起一個問題,可能會存在循環引用的內存泄漏風險

經過jQuery提供的數據接口,就很好的處理了這個問題了,咱們不須要關心它底層是如何實現,只須要按照對應的data方法使用就好了

一樣的也提供2個對應的刪除接口,使用上與data方法實際上是一致的,只不過是一個是增長一個是刪除罷了

jQuery.removeData( element [, name ] )
.removeData( [name ] )複製代碼
相關文章
相關標籤/搜索