jQuery屬性和樣式

jQuery的屬性與樣式之.attr()與.removeAttr()

每個元素都有一個或者多個特性吭敢,這些特性的用途就是給出相應(yīng)元素或者其內(nèi)容的附加信息。如:在img元素中瘫证,src就是元素的特性碍现,用來標記圖片的地址。
操作特性的DOM方法主要有3個凹嘲,getAttribute方法、setAttribute方法和removeAttribute方法构韵,就算如此在實際操作中還是會存在很多問題周蹭,這里先不說。而在jQuery中用一個attr()與removeAttr()就可以全部搞定了疲恢,包括兼容問題
jQuery中用attr()方法來獲取和設(shè)置元素屬性,attr是attribute(屬性)的縮寫凶朗,在jQuery DOM操作中會經(jīng)常用到attr()
attr()有4個表達式

  1. attr(傳入屬性名):獲取屬性的值
  2. attr(屬性名, 屬性值):設(shè)置屬性的值
  3. attr(屬性名,函數(shù)值):設(shè)置屬性的函數(shù)值
  4. attr(attributes):給指定元素設(shè)置多個屬性值,即:{屬性名一: “屬性值一” , 屬性名二: “屬性值二” , … … }
    removeAttr()刪除方法
    .removeAttr( attributeName ) : 為匹配的元素集合中的每個元素中移除一個屬性(attribute)
    優(yōu)點:
    attr显拳、removeAttr都是jQuery為了屬性操作封裝的棚愤,直接在一個 jQuery 對象上調(diào)用該方法,很容易對屬性進行操作,也不需要去特意的理解瀏覽器的屬性名不同的問題
    注意的問題:
    dom中有個概念的區(qū)分:Attribute和Property翻譯出來都是“屬性”宛畦,《js高級程序設(shè)計》書中翻譯為“特性”和“屬性”瘸洛。簡單理解,Attribute就是dom節(jié)點自帶的屬性
    例如:html中常用的id次和、class反肋、title、align等:
    <div id="immooc" title="慕課網(wǎng)"></div>
    而Property是這個DOM元素作為對象斯够,其附加的內(nèi)容囚玫,例如,tagName, nodeName, nodeType,, defaultChecked, 和 defaultSelected 使用.prop()方法進行取值或賦值等
    獲取Attribute就需要用attr,獲取Property就需要用prop

jQuery的屬性與樣式之html()及.text()

讀取读规、修改元素的html結(jié)構(gòu)或者元素的文本內(nèi)容是常見的DOM操作抓督,jQuery針對這樣的處理提供了2個便捷的方法.html()與.text()
.html()方法
獲取集合中第一個匹配元素的HTML內(nèi)容 或 設(shè)置每一個匹配元素的html內(nèi)容,具體有3種用法:

  1. .html() 不傳入值束亏,就是獲取集合中第一個匹配元素的HTML內(nèi)容
  2. .html( htmlString ) 設(shè)置每一個匹配元素的html內(nèi)容
  3. .html( function(index, oldhtml) ) 用來返回設(shè)置HTML內(nèi)容的一個函數(shù)
    注意事項:
    .html()方法內(nèi)部使用的是DOM的innerHTML屬性來處理的铃在,所以在設(shè)置與獲取上需要注意的一個最重要的問題,這個操作是針對整個HTML內(nèi)容(不僅僅只是文本內(nèi)容)
    .text()方法
    得到匹配元素集合中每個元素的文本內(nèi)容結(jié)合碍遍,包括他們的后代定铜,或設(shè)置匹配元素集合中每個元素的文本內(nèi)容為指定的文本內(nèi)容。怕敬,具體有3種用法:
  4. .text() 得到匹配元素集合中每個元素的合并文本揣炕,包括他們的后代
  5. .text( textString ) 用于設(shè)置匹配元素內(nèi)容的文本
  6. .text( function(index, text) ) 用來返回設(shè)置文本內(nèi)容的一個函數(shù)
    注意事項:
    .text()結(jié)果返回一個字符串,包含所有匹配元素的合并文本
    .html與.text的異同:
  7. .html與.text的方法操作是一樣东跪,只是在具體針對處理對象不同
  8. .html處理的是元素內(nèi)容畸陡,.text處理的是文本內(nèi)容
  9. .html只能使用在HTML文檔中,.text 在XML 和 HTML 文檔中都能使用
  10. 如果處理的對象只有一個子文本節(jié)點虽填,那么html處理的結(jié)果與text是一樣的
  11. 火狐不支持innerText屬性丁恭,用了類似的textContent屬性,.text()方法綜合了2個屬性的支持斋日,所以可以兼容所有瀏覽器

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

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

  1. .val()無參數(shù)恶守,獲取匹配的元素集合中第一個元素的當前值
  2. .val( value )第献,設(shè)置匹配的元素集合中每個元素的值
  3. .val( function ) ,一個用來返回設(shè)置值的函數(shù)
    注意事項:
  4. 通過.val()處理select元素兔港, 當沒有選擇項被選中庸毫,它返回null
  5. .val()方法多用來設(shè)置表單的字段的值
  6. 如果select元素有multiple(多選)屬性,并且至少一個選擇項被選中押框, .val()方法返回一個數(shù)組岔绸,這個數(shù)組包含每個選中選擇項的值

.html(),.text()和.val()的差異總結(jié):

  1. .html(),.text(),.val()三種方法都是用來讀取選定元素的內(nèi)容理逊;只不過.html()是用來讀取元素的html內(nèi)容(包括html標簽)橡伞,.text()用來讀取元素的純文本內(nèi)容盒揉,包括其后代元素,.val()是用來讀取表單元素的"value"值兑徘。其中.html()和.text()方法不能使用在表單元素上,而.val()只能使用在表單元素上刚盈;另外.html()方法使用在多個元素上時,只讀取第一個元素挂脑;.val()方法和.html()相同藕漱,如果其應(yīng)用在多個元素上時,只能讀取第一個表單元素的"value"值崭闲,但是.text()和他們不一樣肋联,如果.text()應(yīng)用在多個元素上時,將會讀取所有選中元素的文本內(nèi)容刁俭。
  2. .html(htmlString),.text(textString)和.val(value)三種方法都是用來替換選中元素的內(nèi)容橄仍,如果三個方法同時運用在多個元素上時,那么將會替換所有選中元素的內(nèi)容牍戚。
  3. .html(),.text(),.val()都可以使用回調(diào)函數(shù)的返回值來動態(tài)的改變多個元素的內(nèi)容侮繁。

jQuery的屬性與樣式之增加樣式.addClass()

通過動態(tài)改變類名(class),可以讓其修改元素呈現(xiàn)出不同的效果如孝。在HTML結(jié)構(gòu)中里宪哩,多個class以空格分隔,當一個節(jié)點(或稱為一個標簽)含有多個class時第晰,DOM元素響應(yīng)的className屬性獲取的不是class名稱的數(shù)組锁孟,而是一個含有空格的字符串,這就使得多class操作變得很麻煩但荤。同樣的jQuery開發(fā)者也考慮到這種情況罗岖,增加了一個.addClass()方法,用于動態(tài)增加class類名
.addClass( className )方法

  1. .addClass( className ) : 為每個匹配元素所要增加的一個或多個樣式名
  2. .addClass( function(index, currentClass) ) : 這個函數(shù)返回一個或更多用空格隔開的要增加的樣式名
    注意事項:
    .addClass()方法不會替換一個樣式類名腹躁。它只是簡單的添加一個樣式類名到元素上
    簡單的描述下:在p元素增加一個newClass的樣式
    <p class="orgClass">
    $("p").addClass("newClass")
    那么p元素的class實際上是 class="orgClass newClass"樣式只會在原本的類上繼續(xù)增加桑包,通過空格分隔

jQuery的屬性與樣式之刪除樣式.removeClass()

jQuery通過.addClass()方法可以很便捷的增加樣式。如果需要樣式之間的切換纺非,同樣jQuery提供了一個很方便的.removeClass()哑了,它的作用是從匹配的元素中刪除全部或者指定的class
.removeClass( )方法

  1. .removeClass( [className ] ):每個匹配元素移除的一個或多個用空格隔開的樣式名
  2. .removeClass( function(index, class) ) : 一個函數(shù),返回一個或多個將要被移除的樣式名
    注意事項
    如果一個樣式類名作為一個參數(shù),只有這樣式類會被從匹配的元素集合中刪除 烧颖。 如果沒有樣式名作為參數(shù)弱左,那么所有的樣式類將被移除

jQuery的屬性與樣式之切換樣式.toggleClass()

在做某些效果的時候,可能會針對同一節(jié)點的某一個樣式不斷的切換炕淮,也就是addClass與removeClass的互斥切換拆火,比如隔行換色效果
jQuery提供一個toggleClass方法用于簡化這種互斥的邏輯,通過toggleClass方法動態(tài)添加刪除Class,一次執(zhí)行相當于addClass们镜,再次執(zhí)行相當于removeClass
.toggleClass( )方法:在匹配的元素集合中的每個元素上添加或刪除一個或多個樣式類,取決于這個樣式類是否存在或值切換屬性币叹。即:如果存在(不存在)就刪除(添加)一個類

  1. .toggleClass( className ):在匹配的元素集合中的每個元素上用來切換的一個或多個(用空格隔開)樣式類名
  2. .toggleClass( className, switch ):一個布爾值,用于判斷樣式是否應(yīng)該被添加或移除
  3. .toggleClass( [switch ] ):一個用來判斷樣式類添加還是移除的 布爾值
  4. .toggleClass( function(index, class, switch) [, switch ] ):用來返回在匹配的元素集合中的每個元素上用來切換的樣式類名的一個函數(shù)模狭。接收元素的索引位置和元素舊的樣式類作為參數(shù)
    注意事項:
  5. toggleClass是一個互斥的邏輯颈抚,也就是通過判斷對應(yīng)的元素上是否存在指定的Class名,如果有就刪除嚼鹉,如果沒有就增加
  6. toggleClass會保留原有的Class名后新增贩汉,通過空格隔開

jQuery的屬性與樣式之樣式操作.css()

通過JavaScript獲取dom元素上的style屬性,我們可以動態(tài)的給元素賦予樣式屬性锚赤。在jQuery中我們要動態(tài)的修改style屬性我們只要使用css()方法就可以實現(xiàn)了
.css() 方法:獲取元素樣式屬性的計算值或者設(shè)置元素的CSS屬性
獲绕ノ琛:

  1. .css( propertyName ) :獲取匹配元素集合中的第一個元素的樣式屬性的計算值
  2. .css( propertyNames ):傳遞一組數(shù)組,返回一個對象結(jié)果
    設(shè)置:
  3. .css(propertyName, value ):設(shè)置CSS
  4. .css( propertyName, function ):可以傳入一個回調(diào)函數(shù)线脚,返回取到對應(yīng)的值進行處理
  5. .css( properties ):可以傳一個對象策菜,同時設(shè)置多個樣式
    注意事項:
  6. 瀏覽器屬性獲取方式不同,在獲取某些值的時候都jQuery采用統(tǒng)一的處理酒贬,比如顏色采用RBG又憨,尺寸采用px
  7. .css()方法支持駝峰寫法與大小寫混搭的寫法,內(nèi)部做了容錯的處理
  8. 當一個數(shù)只被作為值(value)的時候锭吨, jQuery會將其轉(zhuǎn)換為一個字符串蠢莺,并添在字符串的結(jié)尾處添加px,例如 .css("width",50}) 與 .css("width","50px"})一樣

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

對于樣式的設(shè)置零如,我們學(xué)了addClass與css方法躏将,那么兩者之間有什么區(qū)別?
可維護性:
.addClass()的本質(zhì)是通過定義個class類的樣式規(guī)則考蕾,給元素添加一個或多個類祸憋。css方法是通過JavaScript大量代碼進行改變元素的樣式
通過.addClass()我們可以批量的給相同的元素設(shè)置統(tǒng)一規(guī)則,變動起來比較方便肖卧,可以統(tǒng)一修改刪除蚯窥。如果通過.css()方法就需要指定每一個元素是一一的修改,日后維護也要一一的修改塞帐,比較麻煩
靈活性:
通過.css()方式可以很容易動態(tài)的去改變一個樣式的屬性拦赠,不需要在去繁瑣的定義個class類的規(guī)則。一般來說在不確定開始布局規(guī)則葵姥,通過動態(tài)生成的HTML代碼結(jié)構(gòu)中荷鼠,都是通過.css()方法處理的
樣式值:
.addClass()本質(zhì)只是針對class的類的增加刪除,不能獲取到指定樣式的屬性的值榔幸,.css()可以獲取到指定的樣式值允乐。
樣式的優(yōu)先級:
css的樣式是有優(yōu)先級的矮嫉,當外部樣式、內(nèi)部樣式和內(nèi)聯(lián)樣式同一樣式規(guī)則同時應(yīng)用于同一個元素的時候牍疏,優(yōu)先級如下
外部樣式 < 內(nèi)部樣式 < 內(nèi)聯(lián)樣式

  1. .addClass()方法是通過增加class名的方式敞临,那么這個樣式是在外部文件或者內(nèi)部樣式中先定義好的,等到需要的時候在附加到元素上
  2. 通過.css()方法處理的是內(nèi)聯(lián)樣式麸澜,直接通過元素的style屬性附加到元素上的
    通過.css方法設(shè)置的樣式屬性優(yōu)先級要高于.addClass方法
    總結(jié):
    .addClass與.css方法各有利弊,一般是靜態(tài)的結(jié)構(gòu)奏黑,都確定了布局的規(guī)則炊邦,可以用addClass的方法,增加統(tǒng)一的類規(guī)則
    如果是動態(tài)的HTML結(jié)構(gòu)熟史,在不確定規(guī)則馁害,或者經(jīng)常變化的情況下,一般多考慮.css()方式

jQuery的屬性與樣式之元素的數(shù)據(jù)存儲

html5 dataset是新的HTML5標準蹂匹,允許你在普通的元素標簽里嵌入類似data-*的屬性碘菜,來實現(xiàn)一些簡單數(shù)據(jù)的存取。它的數(shù)量不受限制限寞,并且也能由JavaScript動態(tài)修改忍啸,也支持CSS選擇器進行樣式設(shè)置。這使得data屬性特別靈活履植,也非常強大计雌。有了這樣的屬性我們能夠更加有序直觀的進行數(shù)據(jù)預(yù)設(shè)或存儲。那么在不支持HTML5標準的瀏覽器中玫霎,我們?nèi)绾螌崿F(xiàn)數(shù)據(jù)存取? jQuery就提供了一個.data()的方法來處理這個問題
使用jQuery初學(xué)者一般不是很關(guān)心data方式凿滤,這個方法是jquery內(nèi)部預(yù)用的,可以用來做性能優(yōu)化庶近,比如sizzle選擇中可以用來緩存部分結(jié)果集等等翁脆。當然這個也是非常重要的一個API了,常常用于我們存放臨時的一些數(shù)據(jù)鼻种,因為它是直接跟DOM元素對象綁定在一起的
jQuery提供的存儲接口

jQuery.data( element, key, value )   //靜態(tài)接口,存數(shù)據(jù)
jQuery.data( element, key )  //靜態(tài)接口,取數(shù)據(jù)   
.data( key, value ) //實例接口,存數(shù)據(jù)
.data( key ) //實例接口,存數(shù)據(jù)

2個方法在使用上存取都是通一個接口反番,傳遞元素,鍵值數(shù)據(jù)叉钥。在jQuery的官方文檔中恬口,建議用.data()方法來代替。
我們把DOM可以看作一個對象沼侣,那么我們往對象上是可以存在基本類型祖能,引用類型的數(shù)據(jù)的,但是這里會引發(fā)一個問題蛾洛,可能會存在循環(huán)引用的內(nèi)存泄漏風(fēng)險
通過jQuery提供的數(shù)據(jù)接口养铸,就很好的處理了這個問題了雁芙,我們不需要關(guān)心它底層是如何實現(xiàn),只需要按照對應(yīng)的data方法使用就行了
同樣的也提供2個對應(yīng)的刪除接口钞螟,使用上與data方法其實是一致的兔甘,只不過是一個是增加一個是刪除罷了
jQuery.removeData( element [, name ] )
.removeData( [name ] )

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鳞滨,隨后出現(xiàn)的幾起案子洞焙,更是在濱河造成了極大的恐慌,老刑警劉巖拯啦,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澡匪,死亡現(xiàn)場離奇詭異,居然都是意外死亡褒链,警方通過查閱死者的電腦和手機唁情,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甫匹,“玉大人甸鸟,你說我怎么就攤上這事”福” “怎么了抢韭?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恍箭。 經(jīng)常有香客問我篮绰,道長,這世上最難降的妖魔是什么季惯? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任吠各,我火速辦了婚禮,結(jié)果婚禮上勉抓,老公的妹妹穿的比我還像新娘贾漏。我一直安慰自己,他們只是感情好藕筋,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布纵散。 她就那樣靜靜地躺著,像睡著了一般隐圾。 火紅的嫁衣襯著肌膚如雪伍掀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天暇藏,我揣著相機與錄音蜜笤,去河邊找鬼。 笑死盐碱,一個胖子當著我的面吹牛把兔,可吹牛的內(nèi)容都是我干的沪伙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼县好,長吁一口氣:“原來是場噩夢啊……” “哼围橡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缕贡,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翁授,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晾咪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體收擦,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年禀酱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牧嫉。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡剂跟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出酣藻,到底是詐尸還是另有隱情曹洽,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布辽剧,位于F島的核電站送淆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怕轿。R本人自食惡果不足惜偷崩,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撞羽。 院中可真熱鬧阐斜,春花似錦、人聲如沸诀紊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻奠。三九已至笤喳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碌宴,已是汗流浹背杀狡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贰镣,地道東北人捣卤。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓忍抽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親董朝。 傳聞我的和親對象是個殘疾皇子鸠项,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、樣式篇 第1章 初識jQuery (1)環(huán)境搭建 進入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,386評論 0 44
  • 第一章 jQuery簡介 1-1 jQuery簡介 1.簡介 2.優(yōu)勢 3.特性與工具方法 1-2 環(huán)境搭建 進入...
    mo默22閱讀 1,587評論 0 11
  • jQuery基礎(chǔ)(一)——樣式篇 1-2環(huán)境搭建 1-3 jQuery HelloWorld體驗 $(docume...
    croyance0601閱讀 1,083評論 0 8
  • 通過jQuery子姜,您可以選人畎怼(查詢,query)HTML元素哥捕,并對它們執(zhí)行“操作”(actions)牧抽。 jQuer...
    枇杷樹8824閱讀 657評論 0 3
  • 現(xiàn)在社會竟爭越來越激烈,信息越來越豐富遥赚,人與人之間扬舒,員工與企業(yè)領(lǐng)導(dǎo)的之間的關(guān)系越來越微妙。樹立正確的人生觀就顯得非...
    子陽靜娟閱讀 173評論 1 1