jQuery基礎(chǔ)入門

jQuery基礎(chǔ)(一)——樣式篇

1-2環(huán)境搭建

1-3 jQuery HelloWorld體驗(yàn)

$(document).ready的作用是等頁(yè)面的文檔(document)中的節(jié)點(diǎn)都加載完畢后,再執(zhí)行后續(xù)的代碼

1-4 jQuery對(duì)象與DOM對(duì)象

jQuery的對(duì)象與DOM對(duì)象是不一樣的

例如:

我們要獲取頁(yè)面上這個(gè)id為imooc的p元素,然后給這個(gè)文本節(jié)點(diǎn)增加一段文字:“您好!通過(guò)慕課網(wǎng)學(xué)習(xí)jQuery才是最佳的途徑”,并且讓文字顏色變成紅色。

普通處理,通過(guò)標(biāo)準(zhǔn)JavaScript處理:

通過(guò)原生DOM模型提供的document.getElementById(“imooc”)方法獲取的DOM元素就是一個(gè)DOM對(duì)象,再通過(guò)innerHTML與style屬性處理文本與顏色。

jQuery的處理:

通過(guò)$('#imooc')方法會(huì)得到一個(gè)$p的jQuery對(duì)象,$p是一個(gè)類數(shù)組對(duì)象。這個(gè)對(duì)象里面包含了DOM對(duì)象的信息,然后封裝了很多操作方法,調(diào)用自己的方法html與css,得到的效果與標(biāo)準(zhǔn)的JavaScript處理結(jié)果是一致的。

標(biāo)準(zhǔn)的JavaScript操作DOM與jQuyer操作DOM的對(duì)比,我們不難發(fā)現(xiàn):

通過(guò)jQuery方法包裝后的對(duì)象,是一個(gè)類數(shù)組對(duì)象。它與DOM對(duì)象完全不同,唯一相似的是它們都能操作DOM。

通過(guò)jQuery處理DOM的操作,可以讓開(kāi)發(fā)者更專注業(yè)務(wù)邏輯的開(kāi)發(fā),而不需要我們具體知道哪個(gè)DOM節(jié)點(diǎn)有那些方法,也不需要關(guān)心不同瀏覽器的兼容性問(wèn)題,我們通過(guò)jQuery提供的API進(jìn)行開(kāi)發(fā),代碼也會(huì)更加精短。

1-5 jQuery對(duì)象轉(zhuǎn)化成DOM對(duì)象

jQuery是一個(gè)類數(shù)組對(duì)象,而DOM對(duì)象就是一個(gè)單獨(dú)的DOM元素。

如何把jQuery對(duì)象轉(zhuǎn)成DOM對(duì)象?

利用數(shù)組下標(biāo)的方式讀取到j(luò)Query中的DOM對(duì)象

數(shù)組的索引是從0開(kāi)始的,也就是第一個(gè)元素下標(biāo)是0

通過(guò)jQuery自帶的get()方法

jQuery對(duì)象自身提供一個(gè).get()方法允許我們直接訪問(wèn)jQuery對(duì)象中相關(guān)的DOM節(jié)點(diǎn),get方法中提供一個(gè)元素的索引:

1-6DOM對(duì)象轉(zhuǎn)化成jQuery對(duì)象

$(參數(shù))是一個(gè)多功能的方法,通過(guò)傳遞不同的參數(shù)而產(chǎn)生不同的作用。

如果傳遞給$(DOM)函數(shù)的參數(shù)是一個(gè)DOM對(duì)象,jQuery方法會(huì)把這個(gè)DOM對(duì)象給包裝成一個(gè)新的jQuery對(duì)象。(通過(guò)$(dom)方法將普通的dom對(duì)象加工成jQuery對(duì)象之后,我們就可以調(diào)用jQuery的方法了)

通過(guò)getElementsByTagName獲取到所有div節(jié)點(diǎn)的元素,結(jié)果是一個(gè)dom合集對(duì)象,不過(guò)這個(gè)對(duì)象是一個(gè)數(shù)組合集(3個(gè)div元素)。通過(guò)$(div)方法轉(zhuǎn)化成jQuery對(duì)象,通過(guò)調(diào)用jQuery對(duì)象中的first與css方法查找第一個(gè)元素并且改變其顏色。

2-1 jQuery選擇器之id選擇器

id選擇器:一個(gè)用來(lái)查找的ID,即元素的id屬性

id選擇器也是基本的選擇器,jQuery內(nèi)部使用JavaScript函數(shù)document.getElementById()來(lái)處理ID的獲取。原生語(yǔ)法的支持總是非常高效的,所以在操作DOM的獲取上,如果能采用id的話盡然考慮用這個(gè)選擇器

值得注意:

id是唯一的,每個(gè)id值在一個(gè)頁(yè)面中只能使用一次。如果多個(gè)元素分配了相同的id,將只匹配該id選擇集合的第一個(gè)DOM元素。但這種行為不應(yīng)該發(fā)生;有超過(guò)一個(gè)元素的頁(yè)面使用相同的id是無(wú)效的

2-2 jQuery選擇器之類選擇器

類選擇器,顧名思義,通過(guò)class樣式類名來(lái)獲取節(jié)點(diǎn)

類選擇器,相對(duì)id選擇器來(lái)說(shuō),效率相對(duì)會(huì)低一點(diǎn),但是優(yōu)勢(shì)就是可以多選

同樣的jQuery在實(shí)現(xiàn)上,對(duì)于類選擇器,如果瀏覽器支持,jQuery使用JavaScript的原生getElementsByClassName()函數(shù)來(lái)實(shí)現(xiàn)的。

jQuery除了選擇上的簡(jiǎn)單,而且沒(méi)有再次使用循環(huán)處理。

$(".imooc").css()方法內(nèi)部肯定是帶了一個(gè)隱式的循環(huán)處理,所以使用jQuery選擇節(jié)點(diǎn),不僅僅只是選擇上的簡(jiǎn)單,同時(shí)還增加很多關(guān)聯(lián)的便利操作。

2-3 jQuery選擇器之元素選擇器

元素選擇器:根據(jù)給定(html)標(biāo)記名稱選擇所有的元素

搜索指定元素標(biāo)簽名的所有節(jié)點(diǎn),這個(gè)是一個(gè)合集的操作。同樣的也有原生方法getElementsByTagName()函數(shù)支持

2-4 jQuery選擇器之全選擇器(*選擇器)

全選選擇器*

jQuery,如果要獲取文檔中所有的元素,通過(guò)document.getElementsByTagName()中傳遞"*"同樣可以獲取到。

id、class、tag都可以通過(guò)原生的方法獲取到對(duì)應(yīng)的節(jié)點(diǎn),但是我們還需要考慮一個(gè)兼容性的問(wèn)題,我這里順便提及一下,比如:

1.IE會(huì)將注釋節(jié)點(diǎn)實(shí)現(xiàn)為元素,所以在IE中調(diào)用getElementsByTagName里面會(huì)包含注釋節(jié)點(diǎn),這個(gè)通常是不應(yīng)該的;

2.getElementById的參數(shù)在IE8及較低的版本不區(qū)分大小寫;

3.IE7及較低的版本中,表單元素中,如果表單A的name屬性名用了另一個(gè)元素B的ID名并且A在B之前,那么getElementById會(huì)選中A;

4.IE8及較低的版本,瀏覽器不支持getElementsByClassName。

2-5 jQuery選擇器之層級(jí)選擇器

選擇器中的層級(jí)選擇器就是用來(lái)處理這種關(guān)系

通過(guò)一個(gè)列表,對(duì)比層級(jí)選擇器的區(qū)別

仔細(xì)觀察層級(jí)選擇器之間還是有很多相似與不同點(diǎn)

1.層級(jí)選擇器都有一個(gè)參考節(jié)點(diǎn)

2.后代選擇器包含子選擇器的選擇的內(nèi)容

3.一般兄弟選擇器包含相鄰兄弟選擇的內(nèi)容

4.相鄰兄弟選擇器和一般兄弟選擇器所選擇到的元素,必須在同一個(gè)父元素下

2-7jQuery選擇器之基本篩選選擇器

篩選選擇器的用法與CSS中的偽元素相似,選擇器用冒號(hào)“:”開(kāi)頭,通過(guò)一個(gè)列表,看看基本篩選器的描述:

注意事項(xiàng):

1.:eq(), :lt(), :gt(), :even, :odd用來(lái)篩選他們前面的匹配表達(dá)式的集合元素,根據(jù)之前匹配的元素在進(jìn)一步篩選,注意jQuery合集都是從0開(kāi)始索引;

2.gt是一個(gè)段落篩選,從指定索引的下一個(gè)開(kāi)始,gt(1)實(shí)際從2開(kāi)始。

2-8jQuery選擇器之內(nèi)容篩選選擇器

基本篩選選擇器針對(duì)的都是元素DOM節(jié)點(diǎn),如果我們要通過(guò)內(nèi)容來(lái)過(guò)濾,jQuery也提供了一組內(nèi)容篩選選擇器,當(dāng)然其規(guī)則也會(huì)體現(xiàn)在它所包含的子元素或者文本內(nèi)容上

內(nèi)容過(guò)濾器描述如下表:

注意事項(xiàng):

1.:contains與:has都有查找的意思,但是contains查找包含“指定文本”的元素,has查找包含“指定元素”的元素;

2.如果:contains匹配的文本包含在元素的子元素中,同樣認(rèn)為是符合條件的;

3.:parent與:empty是相反的,兩者所涉及的子元素,包括文本節(jié)點(diǎn)。

2-9jQuery選擇器之可見(jiàn)性篩選選擇器

元素有顯示狀態(tài)與隱藏狀態(tài),jQuery根據(jù)元素的狀態(tài)擴(kuò)展了可見(jiàn)性篩選選擇器:visible與:hidden。

這2個(gè)選擇器都是jQuery延伸出來(lái)的,看起來(lái)比較簡(jiǎn)單,但是元素可見(jiàn)性依賴于適用的樣式

:hidden選擇器,不僅僅包含樣式是display="none"的元素,還包括隱藏表單、visibility等等

我們有幾種方式可以隱藏一個(gè)元素:

1.CSS display的值是none。

2.type="hidden"的表單元素。

3.寬度和高度都顯式設(shè)置為0。

4.一個(gè)祖先元素是隱藏的,該元素是不會(huì)在頁(yè)面上顯示

5.CSS visibility的值是hidden

6.CSS opacity的指是0

如果元素中占據(jù)文檔中一定的空間,元素被認(rèn)為是可見(jiàn)的。

可見(jiàn)元素的寬度或高度,是大于零。

元素的visibility:

hidden或opacity: 0被認(rèn)為是可見(jiàn)的,因?yàn)樗麄內(nèi)匀徽加每臻g布局。

不在文檔中的元素是被認(rèn)為是不可見(jiàn)的,如果當(dāng)他們被插入到文檔中,jQuery沒(méi)有辦法知道他們是否是可見(jiàn)的,因?yàn)樵乜梢?jiàn)性依賴于適用的樣式。

2-10 jQuery選擇器之屬性篩選選擇器

屬性選擇器

瀏覽器支持:

1.[att=val]、[att]、[att|=val]、[att~=val]? 屬于CSS 2.1規(guī)范

2.[ns|attr]、[att^=val]、[att*=val]、[att$=val] 屬于CSS3規(guī)范

3.[name!="value"]? 屬于jQuery 擴(kuò)展的選擇器

在這么多屬性選擇器中[attr="value"]和[attr*="value"]是最實(shí)用的

[attr="value"]能幫我們定位不同類型的元素,特別是表單form元素的操作,比如說(shuō)input[type="text"],input[type="checkbox"]等

[attr*="value"]能在網(wǎng)站中幫助我們匹配不同類型的文件

2-11 jQuery選擇器之子元素篩選選擇器

子元素篩選選擇器描述表:

子元素選擇器

注意事項(xiàng):

1. :first只匹配一個(gè)單獨(dú)的元素,但是:first-child選擇器可以匹配多個(gè):即為每個(gè)父級(jí)元素匹配第一個(gè)子元素。這相當(dāng)于:nth-child(1)

2. :last 只匹配一個(gè)單獨(dú)的元素, :last-child 選擇器可以匹配多個(gè)元素:即,為每個(gè)父級(jí)元素匹配最后一個(gè)子元素

3. 如果子元素只有一個(gè)的話,:first-child與:last-child是同一個(gè)

4. :only-child匹配某個(gè)元素是父元素中唯一的子元素,就是說(shuō)當(dāng)前子元素是父元素中唯一的元素,則匹配

5. jQuery實(shí)現(xiàn):nth-child(n)是嚴(yán)格來(lái)自CSS規(guī)范,所以n值是“索引”,也就是說(shuō),從1開(kāi)始計(jì)數(shù),:nth-child(index)從1開(kāi)始的,而eq(index)是從0開(kāi)始的

6. nth-child(n) 與 :nth-last-child(n) 的區(qū)別前者是從前往后計(jì)算,后者從后往前計(jì)算

2-12 jQuery選擇器之表單元素選擇器

表單選擇器的具體方法描述:

表單選擇器

注意事項(xiàng):

除了input篩選選擇器,幾乎每個(gè)表單類別篩選器都對(duì)應(yīng)一個(gè)input元素的type值。大部分表單類別篩選器可以使用屬性篩選器替換。比如 $(':password') == $('[type=password]')

2-13 jQuery選擇器之表單對(duì)象屬性篩選選擇器

除了表單元素選擇器外,表單對(duì)象屬性篩選選擇器也是專門針對(duì)表單元素的選擇器,可以附加在其他選擇器的后面,主要功能是對(duì)所選擇的表單元素進(jìn)行篩選

表單篩選選擇器的描述:

表單對(duì)象選擇器

注意事項(xiàng):

選擇器適用于復(fù)選框和單選框,對(duì)于下拉框元素, 使用 :selected 選擇器

在某些瀏覽器中,選擇器:checked可能會(huì)錯(cuò)誤選取到<potion>元素,所以保險(xiǎn)起見(jiàn)換用選擇器input:checked,確保只會(huì)選取<input>元素

練習(xí)題

1 選擇所有包含指定文本的元素

:contains()選擇器中括號(hào)內(nèi)的文字,可為純文本,或用引號(hào)包圍

2 現(xiàn)有一個(gè)表格,如果想要jQuery的方法直接匹配所有行數(shù)為偶數(shù)的,用________實(shí)現(xiàn),奇數(shù)的用_______實(shí)現(xiàn)。

even:選擇索引值為偶數(shù)的元素,從 0 開(kāi)始計(jì)數(shù)

odd: 選擇索引值為奇數(shù)的元素,從 0 開(kāi)始計(jì)數(shù)

3 在一個(gè)表單里,想要找到指定元素的第一個(gè)元素用_________實(shí)現(xiàn),那么第二個(gè)元素用_________實(shí)現(xiàn)。

eq:在匹配的集合中選擇索引值為index的元素

因?yàn)閖Query合集是從0開(kāi)始索引的,所以eq(1)就是第二個(gè)元素

2-16 jQuery選擇器之特殊選擇器this

相信很多剛接觸jQuery的人,很多都會(huì)對(duì)$(this)和this的區(qū)別模糊不清,那么這兩者有什么區(qū)別呢?

this是JavaScript中的關(guān)鍵字,指的是當(dāng)前的上下文對(duì)象,簡(jiǎn)單的說(shuō)就是方法/屬性的所有者

下面例子中,xiaoming是一個(gè)對(duì)象,擁有name屬性與getName方法,在getName中this指向了所屬的對(duì)象xiaoming

當(dāng)然在JavaScript中this是動(dòng)態(tài)的,也就是說(shuō)這個(gè)上下文對(duì)象都是可以被動(dòng)態(tài)改變的(可以通過(guò)call,apply等方法),具體的大家可以查閱相關(guān)資料

同樣的在DOM中this就是指向了這個(gè)html元素對(duì)象,因?yàn)閠his就是DOM元素本身的一個(gè)引用

假如給頁(yè)面一個(gè)P元素綁定一個(gè)事件:

通過(guò)addEventListener綁定的事件回調(diào)中,this指向的是當(dāng)前的dom對(duì)象,所以再次修改這樣對(duì)象的樣式,只需要通過(guò)this獲取到引用即可

但是這樣的操作其實(shí)還是很不方便的,這里面就要涉及一大堆的樣式兼容,如果通過(guò)jQuery處理就會(huì)簡(jiǎn)單多了,我們只需要把this加工成jQuery對(duì)象

換成jQuery的做法:

通過(guò)把$()方法傳入當(dāng)前的元素對(duì)象的引用this,把這個(gè)this加工成jQuery對(duì)象,我們就可以用jQuery提供的快捷方法直接處理樣式了

總體:

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

每個(gè)元素都有一個(gè)或者多個(gè)特性,這些特性的用途就是給出相應(yīng)元素或者其內(nèi)容的附加信息。如:在img元素中,src就是元素的特性,用來(lái)標(biāo)記圖片的地址。

操作特性的DOM方法主要有3個(gè),getAttribute方法、setAttribute方法和removeAttribute方法,就算如此在實(shí)際操作中還是會(huì)存在很多問(wèn)題,這里先不說(shuō)。而在jQuery中用一個(gè)attr()與removeAttr()就可以全部搞定了,包括兼容問(wèn)題

jQuery中用attr()方法來(lái)獲取和設(shè)置元素屬性,attr是attribute(屬性)的縮寫,在jQuery DOM操作中會(huì)經(jīng)常用到attr()

attr()有4個(gè)表達(dá)式

attr(傳入屬性名):獲取屬性的值

attr(屬性名, 屬性值):設(shè)置屬性的值

attr(屬性名,函數(shù)值):設(shè)置屬性的函數(shù)值

attr(attributes):給指定元素設(shè)置多個(gè)屬性值,即:{屬性名一: “屬性值一” , 屬性名二: “屬性值二” , … … }

removeAttr()刪除方法

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

優(yōu)點(diǎn):

attr、removeAttr都是jQuery為了屬性操作封裝的,直接在一個(gè) jQuery 對(duì)象上調(diào)用該方法,很容易對(duì)屬性進(jìn)行操作,也不需要去特意的理解瀏覽器的屬性名不同的問(wèn)題

注意的問(wèn)題:

dom中有個(gè)概念的區(qū)分:Attribute和Property翻譯出來(lái)都是“屬性”,《js高級(jí)程序設(shè)計(jì)》書(shū)中翻譯為“特性”和“屬性”。簡(jiǎn)單理解,Attribute就是dom節(jié)點(diǎn)自帶的屬性

例如:html中常用的id、class、title、align等:

而Property是這個(gè)DOM元素作為對(duì)象,其附加的內(nèi)容,例如,tagName, nodeName, nodeType,, defaultChecked, 和 defaultSelected 使用.prop()方法進(jìn)行取值或賦值等

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

讀取、修改元素的html結(jié)構(gòu)或者元素的文本內(nèi)容是常見(jiàn)的DOM操作,jQuery針對(duì)這樣的處理提供了2個(gè)便捷的方法.html()與.text()

.html()方法

獲取集合中第一個(gè)匹配元素的HTML內(nèi)容 或 設(shè)置每一個(gè)匹配元素的html內(nèi)容,具體有3種用法:

.html() 不傳入值,就是獲取集合中第一個(gè)匹配元素的HTML內(nèi)容

.html( htmlString )? 設(shè)置每一個(gè)匹配元素的html內(nèi)容

.html( function(index, oldhtml) ) 用來(lái)返回設(shè)置HTML內(nèi)容的一個(gè)函數(shù)

注意事項(xiàng):

.text()方法

得到匹配元素集合中每個(gè)元素的文本內(nèi)容結(jié)合,包括他們的后代,或設(shè)置匹配元素集合中每個(gè)元素的文本內(nèi)容為指定的文本內(nèi)容。,具體有3種用法:

.text() 得到匹配元素集合中每個(gè)元素的合并文本,包括他們的后代

.text( textString ) 用于設(shè)置匹配元素內(nèi)容的文本

.text( function(index, text) ) 用來(lái)返回設(shè)置文本內(nèi)容的一個(gè)函數(shù)

注意事項(xiàng):

.html與.text的異同:

.html與.text的方法操作是一樣,只是在具體針對(duì)處理對(duì)象不同

.html處理的是元素內(nèi)容,.text處理的是文本內(nèi)容

.html只能使用在HTML文檔中,.text 在XML 和 HTML 文檔中都能使用

如果處理的對(duì)象只有一個(gè)子文本節(jié)點(diǎn),那么html處理的結(jié)果與text是一樣的

火狐不支持innerText屬性,用了類似的textContent屬性,.text()方法綜合了2個(gè)屬性的支持,所以可以兼容所有瀏覽器

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

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

.val()方法

.val()無(wú)參數(shù),獲取匹配的元素集合中第一個(gè)元素的當(dāng)前值

.val( value ),設(shè)置匹配的元素集合中每個(gè)元素的值

.val( function ) ,一個(gè)用來(lái)返回設(shè)置值的函數(shù)

注意事項(xiàng):

通過(guò).val()處理select元素, 當(dāng)沒(méi)有選擇項(xiàng)被選中,它返回null

.val()方法多用來(lái)設(shè)置表單的字段的值

如果select元素有multiple(多選)屬性,并且至少一個(gè)選擇項(xiàng)被選中, .val()方法返回一個(gè)數(shù)組,這個(gè)數(shù)組包含每個(gè)選中選擇項(xiàng)的值

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

.html(),.text(),.val()三種方法都是用來(lái)讀取選定元素的內(nèi)容;只不過(guò).html()是用來(lái)讀取元素的html內(nèi)容(包括html標(biāo)簽),.text()用來(lái)讀取元素的純文本內(nèi)容,包括其后代元素,.val()是用來(lái)讀取表單元素的"value"值。其中.html()和.text()方法不能使用在表單元素上,而.val()只能使用在表單元素上;另外.html()方法使用在多個(gè)元素上時(shí),只讀取第一個(gè)元素;.val()方法和.html()相同,如果其應(yīng)用在多個(gè)元素上時(shí),只能讀取第一個(gè)表單元素的"value"值,但是.text()和他們不一樣,如果.text()應(yīng)用在多個(gè)元素上時(shí),將會(huì)讀取所有選中元素的文本內(nèi)容。

.html(htmlString),.text(textString)和.val(value)三種方法都是用來(lái)替換選中元素的內(nèi)容,如果三個(gè)方法同時(shí)運(yùn)用在多個(gè)元素上時(shí),那么將會(huì)替換所有選中元素的內(nèi)容。

.html(),.text(),.val()都可以使用回調(diào)函數(shù)的返回值來(lái)動(dòng)態(tài)的改變多個(gè)元素的內(nèi)容。

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

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

.addClass( className )方法

C.addClass( function(index, currentClass) ) : 這個(gè)函數(shù)返回一個(gè)或更多用空格隔開(kāi)的要增加的樣式名

注意事項(xiàng):

簡(jiǎn)單的描述下:在p元素增加一個(gè)newClass的樣式

那么p元素的class實(shí)際上是 class="orgClass newClass"樣式只會(huì)在原本的類上繼續(xù)增加,通過(guò)空格分隔

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

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

.removeClass( )方法

.removeClass( [className ] ):每個(gè)匹配元素移除的一個(gè)或多個(gè)用空格隔開(kāi)的樣式名

.removeClass( function(index, class) ) : 一個(gè)函數(shù),返回一個(gè)或多個(gè)將要被移除的樣式名

注意事項(xiàng)

如果一個(gè)樣式類名作為一個(gè)參數(shù),只有這樣式類會(huì)被從匹配的元素集合中刪除 。 如果沒(méi)有樣式名作為參數(shù),那么所有的樣式類將被移除

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

在做某些效果的時(shí)候,可能會(huì)針對(duì)同一節(jié)點(diǎn)的某一個(gè)樣式不斷的切換,也就是addClass與removeClass的互斥切換,比如隔行換色效果

jQuery提供一個(gè)toggleClass方法用于簡(jiǎn)化這種互斥的邏輯,通過(guò)toggleClass方法動(dòng)態(tài)添加刪除Class,一次執(zhí)行相當(dāng)于addClass,再次執(zhí)行相當(dāng)于removeClass

.toggleClass( )方法:在匹配的元素集合中的每個(gè)元素上添加或刪除一個(gè)或多個(gè)樣式類,取決于這個(gè)樣式類是否存在或值切換屬性。即:如果存在(不存在)就刪除(添加)一個(gè)類

1 .toggleClass( className ):在匹配的元素集合中的每個(gè)元素上用來(lái)切換的一個(gè)或多個(gè)(用空格隔開(kāi))樣式類名

2 .toggleClass( className, switch ):一個(gè)布爾值,用于判斷樣式是否應(yīng)該被添加或移除

3 .toggleClass( [switch ] ):一個(gè)用來(lái)判斷樣式類添加還是移除的 布爾值

4 .toggleClass( function(index, class, switch) [, switch ] ):用來(lái)返回在匹配的元素集合中的每個(gè)元素上用來(lái)切換的樣式類名的一個(gè)函數(shù)。接收元素的索引位置和元素舊的樣式類作為參數(shù)

注意事項(xiàng):

1. toggleClass是一個(gè)互斥的邏輯,也就是通過(guò)判斷對(duì)應(yīng)的元素上是否存在指定的Class名,如果有就刪除,如果沒(méi)有就增加

2. toggleClass會(huì)保留原有的Class名后新增,通過(guò)空格隔開(kāi)

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

通過(guò)JavaScript獲取dom元素上的style屬性,我們可以動(dòng)態(tài)的給元素賦予樣式屬性。在jQuery中我們要?jiǎng)討B(tài)的修改style屬性我們只要使用css()方法就可以實(shí)現(xiàn)了

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

獲取:

.css( propertyName ) :獲取匹配元素集合中的第一個(gè)元素的樣式屬性的計(jì)算值

.css( propertyNames ):傳遞一組數(shù)組,返回一個(gè)對(duì)象結(jié)果

設(shè)置:

1 .css(propertyName, value ):設(shè)置CSS

2 .css( propertyName, function ):可以傳入一個(gè)回調(diào)函數(shù),返回取到對(duì)應(yīng)的值進(jìn)行處理

3 .css( properties ):可以傳一個(gè)對(duì)象,同時(shí)設(shè)置多個(gè)樣式

注意事項(xiàng):

瀏覽器屬性獲取方式不同,在獲取某些值的時(shí)候都jQuery采用統(tǒng)一的處理,比如顏色采用RBG,尺寸采用px

1 .css()方法支持駝峰寫法與大小寫混搭的寫法,內(nèi)部做了容錯(cuò)的處理

2 當(dāng)一個(gè)數(shù)只被作為值(value)的時(shí)候, jQuery會(huì)將其轉(zhuǎn)換為一個(gè)字符串,并添在字符串的結(jié)尾處添加px,例如 .css("width",50}) 與 .css("width","50px"})一樣

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

對(duì)于樣式的設(shè)置,我們學(xué)了addClass與css方法,那么兩者之間有什么區(qū)別?

可維護(hù)性:

.addClass()的本質(zhì)是通過(guò)定義個(gè)class類的樣式規(guī)則,給元素添加一個(gè)或多個(gè)類。css方法是通過(guò)JavaScript大量代碼進(jìn)行改變?cè)氐臉邮?/p>

通過(guò).addClass()我們可以批量的給相同的元素設(shè)置統(tǒng)一規(guī)則,變動(dòng)起來(lái)比較方便,可以統(tǒng)一修改刪除。如果通過(guò).css()方法就需要指定每一個(gè)元素是一一的修改,日后維護(hù)也要一一的修改,比較麻煩

靈活性:

通過(guò).css()方式可以很容易動(dòng)態(tài)的去改變一個(gè)樣式的屬性,不需要在去繁瑣的定義個(gè)class類的規(guī)則。一般來(lái)說(shuō)在不確定開(kāi)始布局規(guī)則,通過(guò)動(dòng)態(tài)生成的HTML代碼結(jié)構(gòu)中,都是通過(guò).css()方法處理的

樣式值:

.addClass()本質(zhì)只是針對(duì)class的類的增加刪除,不能獲取到指定樣式的屬性的值,.css()可以獲取到指定的樣式值。

樣式的優(yōu)先級(jí):

css的樣式是有優(yōu)先級(jí)的,當(dāng)外部樣式、內(nèi)部樣式和內(nèi)聯(lián)樣式同一樣式規(guī)則同時(shí)應(yīng)用于同一個(gè)元素的時(shí)候,優(yōu)先級(jí)如下


總結(jié)

3-9 jQuery的屬性與樣式之元素的數(shù)據(jù)存儲(chǔ)

html5 dataset是新的HTML5標(biāo)準(zhǔn),允許你在普通的元素標(biāo)簽里嵌入類似data-*的屬性,來(lái)實(shí)現(xiàn)一些簡(jiǎn)單數(shù)據(jù)的存取。它的數(shù)量不受限制,并且也能由JavaScript動(dòng)態(tài)修改,也支持CSS選擇器進(jìn)行樣式設(shè)置。這使得data屬性特別靈活,也非常強(qiáng)大。有了這樣的屬性我們能夠更加有序直觀的進(jìn)行數(shù)據(jù)預(yù)設(shè)或存儲(chǔ)。那么在不支持HTML5標(biāo)準(zhǔn)的瀏覽器中,我們?nèi)绾螌?shí)現(xiàn)數(shù)據(jù)存取?? jQuery就提供了一個(gè).data()的方法來(lái)處理這個(gè)問(wèn)題

使用jQuery初學(xué)者一般不是很關(guān)心data方式,這個(gè)方法是jquery內(nèi)部預(yù)用的,可以用來(lái)做性能優(yōu)化,比如sizzle選擇中可以用來(lái)緩存部分結(jié)果集等等。當(dāng)然這個(gè)也是非常重要的一個(gè)API了,常常用于我們存放臨時(shí)的一些數(shù)據(jù),因?yàn)樗侵苯痈鶧OM元素對(duì)象綁定在一起的

jQuery提供的存儲(chǔ)接口

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

我們把DOM可以看作一個(gè)對(duì)象,那么我們往對(duì)象上是可以存在基本類型,引用類型的數(shù)據(jù)的,但是這里會(huì)引發(fā)一個(gè)問(wèn)題,可能會(huì)存在循環(huán)引用的內(nèi)存泄漏風(fēng)險(xiǎn)

通過(guò)jQuery提供的數(shù)據(jù)接口,就很好的處理了這個(gè)問(wèn)題了,我們不需要關(guān)心它底層是如何實(shí)現(xiàn),只需要按照對(duì)應(yīng)的data方法使用就行了

同樣的也提供2個(gè)對(duì)應(yīng)的刪除接口,使用上與data方法其實(shí)是一致的,只不過(guò)是一個(gè)是增加一個(gè)是刪除罷了



這個(gè)是慕課網(wǎng)上的jQuery基礎(chǔ),通過(guò)自己可以完全實(shí)現(xiàn),對(duì)之前學(xué)的東西進(jìn)行了系統(tǒng)化的總結(jié)······

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,285評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,548評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,328評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,878評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,098評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,554評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,725評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,971評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,361評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,613評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,339評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,695評(píng)論 2 370

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

  • 一、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,414評(píng)論 0 44
  • 第一章 jQuery簡(jiǎn)介 1-1 jQuery簡(jiǎn)介 1.簡(jiǎn)介 2.優(yōu)勢(shì) 3.特性與工具方法 1-2 環(huán)境搭建 進(jìn)入...
    mo默22閱讀 1,592評(píng)論 0 11
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,774評(píng)論 1 92
  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    前端進(jìn)階之旅閱讀 16,658評(píng)論 18 503
  • 世間紛擾,時(shí)常倦了、傷了、痛了在所難免。倦過(guò)、傷過(guò)、痛過(guò),有的人給自己上了枷鎖,流放在不為人知的角落;有的人給自己...
    tvsoso閱讀 366評(píng)論 0 0