JQuery學(xué)習(xí)筆記整理:CSS和屬性

2018-06-19 15:53 更新

這一章主要是記錄獲取和設(shè)置屬性、處理樣式類和CSS屬性、獲取和設(shè)置元素的HTML或文本內(nèi)容、關(guān)聯(lián)數(shù)據(jù)與元素。


目錄
1、屬性(attr()、removeAttr()、prop()、removeProp()、addClass()、removeClass()、toggleClass())
2、CSS(css())
3、內(nèi)容(html()、text())
4、關(guān)聯(lián)數(shù)據(jù)(data()、removeData())

1、屬性
1.1 attr屬性

attr(name)、attr(name,value)、attr(map)、attr(name,function)  獲取或設(shè)置元素的屬性

removeAttr(name)、removeAttr(name[])  刪除元素的name屬性

prop(name)、prop(name,value)、prop(map)、prop(name,function)  獲取或設(shè)置元素的屬性

removeProp(name) 刪除元素的name屬性

map表示映射對象。

(1)attr()、prop()
attr()和prop()方法都是用來獲取或設(shè)置匹配元素的屬性,當(dāng)獲取時,如果元素上沒有該屬性,則返回 undefined 。

<img class="first" />   

<label for=""><input type="radio" /> 單選框</label>    

<div class="box">   

  <img class="second" />

  <div class="item"></div>   

</div>


$('img').attr('src','example.png');   

$('input').prop('checked','true');   

$(".item").attr({'name':'item','style':'background-color:red'});  

$('img').attr('class');  //返回first

在上面的代碼中,我們給所有img元素設(shè)置src屬性,并賦值為example.png,然后給所有input元素設(shè)置checked屬性為true,然后給所有具有類名item的元素設(shè)置name屬性和style屬性(以鍵值對的形式),最后是獲取img元素的class(發(fā)現(xiàn)只會返回first,也就是第一個匹配的img中的)。

兩個方法的第二個參數(shù)還可以是函數(shù),它還會給函數(shù)傳入兩個參數(shù),第一個是當(dāng)前元素的索引,第二個是當(dāng)前元素該屬性的原始值,函數(shù)內(nèi)this指向?qū)?yīng)當(dāng)前元素的HTMLElement對象。

attr(name,funciton(index,oldVal){})

注意:attr()和prop()方法,當(dāng)針對的是“設(shè)置”時,它會給當(dāng)前jQuery對象所匹配的每一個元素都設(shè)置對應(yīng)的屬性;而當(dāng)針對的是“獲取”時,只會從當(dāng)前jQuery對象所匹配元素的第一個元素中獲取。

attr()和prop()的區(qū)別?
attr壞人prop分別是單詞attribute和property的縮寫,意思都是屬性,不過,在jQuery中,這兩個卻是不同的概念,attribute表示的是文檔節(jié)點的屬性,而property表示JS對象的固有屬性。

<div id="box" data-title="tg"></div>  //這里的id、data-title都是該元素文檔節(jié)點的attribute


var box = document.getElementById('box');

box[name] = 'tg'; //這里的name就是box這個HTMLElement對象的property

從1.6版本開始,attr()返回attribute的值,prop()返回property的值。

也可以這樣理解,attr()方法返回的是字面量值,而prop()方法返回的是計算結(jié)果。

<input type="radio" />


$('input').attr('checked') == undefined   // true

$('input').prop('checked') == false  // true


<input type="radio" checked/>


$('input').attr('checked') == 'checked'   //true

$('input').prop('checked') == true  //true


根據(jù)官方的建議:具有 true 和 false 兩個屬性值的屬性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()。

注意:對于部分屬性,attribute和property是共享數(shù)據(jù)的,在大多數(shù)情況下,都是采用同名的屬性,不過也有個別例外,比如:class,使用attr()方法是class,而使用prop()時,應(yīng)該是className(了解原生JavaScript的應(yīng)該知道,原生JavaScript就是采取這個名字獲取類名)。

(2)removeAttr()、removeProp()

<img src="a.png" alt="我是圖片" class="images" />


$('img').removeAttr('alt');

$('img').removeAttr('src class');


// 結(jié)果 

// <img />

請留意上面代碼中的第二行jquery語句,給removeAttr()傳入的是一個以空格分隔的字符串,它會同時移除src和class屬性(1.7版本以上才支持)。

removeProp()和removeAttr()用法一樣。

注意:不要使用removeProp()方法來刪除DOM元素的本地屬性checked、selected和disabled,一旦你刪除了,你就無法再向該元素重新添加對應(yīng)的屬性,但你可以使用prop()方法來將其屬性設(shè)置為false。

prop('checked',false)


1.2 class屬性

addClass(name)、addClass(function)  為匹配元素添加某個class

hasClass(name)  判斷匹配元素是否有某個class

removeClass(name)、removeClass(function)  刪除匹配元素上某個class

toggleClass()、toggleClass(boolean)、toggleClass(name)、toggleClass(name,boolean)、toggleClass(funciton,boolean)  用于切換class

(1)addClass()、removeClass()
addClass()方法用于為元素添加class,返回jQuery對象本身。

<div class="box"></div>


$('.box').addClass('large');


// 結(jié)果

// <div class="box large"></div>

addClass()方法還可以一次性添加多個class,以空格隔開的字符串傳入:

$('.box').addClass('large item nav');


// 結(jié)果

//<div class="box large item nav"></div>

還可以是回調(diào)函數(shù),還會為回調(diào)函數(shù)傳入兩個參數(shù),第一個參數(shù)是當(dāng)前元素的索引,第二個參數(shù)是當(dāng)前(原始)的class屬性值,函數(shù)內(nèi)this變量指向當(dāng)前元素對應(yīng)的HTMLElement對象。

<div class="box"></div>

<div class="box"></div>


$('.box').addClass(function(index,currentClasses){

  return 'item' + index;

});


//結(jié)果

// <div class="box item-0"></div>

// <div class="box item-1"></div>

注意:addClass()只是在原有css類名的基礎(chǔ)上,添加新的css類名,并不會覆蓋原有的css類名。如果待添加的css類名已經(jīng)存在,則不會重復(fù)添加,也就是說,一個元素上不會出現(xiàn)兩個同名css類名。

如果傳入空字符串或undefined,addClass()方法則不會添加css類名。

removeClass()方法的用法和addClass()一樣,不過它是用于刪除元素的class。

removeClass()方法也支持多個參數(shù):

removeClass('class1 class2')

也支持函數(shù):

removeClass(function(index,currentClasses){})


如果需要移除的css類名不存在,removeClass()函數(shù)就會忽略掉該css類名。

(3)hasClass()
hasClass()用于判斷元素是否擁有某個class,返回布爾值。

<div class="box item"></div>


$('.box').hasClass('item')  // true

$('.box').hasClass('a')   //false


(4)toggleClass()
toggleClass()用于切換class。所謂切換某個class,即若匹配的元素上有這個class就移除它,否則就加上它。

切換多個class
toggleClass()也可切換多個class,用空格隔開的字符串。

切換全部class
如果不提供任何參數(shù)給toggleClass(),結(jié)果就會切換每個匹配元素?fù)碛械娜縞lass。

單方向切換class
如果傳入第二個參數(shù)(為boolean),可以進(jìn)行單方向切換class,也就是只添加(true)還是只移除(false)指定的class。

傳入回調(diào)函數(shù)
toggleClass()還可以傳入一個回調(diào)函數(shù),該函數(shù)還會傳入兩個參數(shù),第一個是當(dāng)前元素在匹配元素中的索引,第二個是該元素當(dāng)前的class,函數(shù)內(nèi)的this變量指向當(dāng)前元素對應(yīng)的HTMLElement對象。

2、CSS
2.1 css方法
(1)獲取

css(name)、css(names)、css(map)、css(name,value)、css(name,function)

css()方法用來設(shè)置或獲取css樣式。

<style>

  .box{font-size:15px;margin:10px;}

</style>

<div class="box" style="color:red"></div>


$('.box').css('font-size');

$('.box').css('fontSize');

原生的JavaScript獲取css屬性時,采取的是駝峰式,而對于jQuery,它不僅支持駝峰式(推薦),而且支持css格式(-),就像上面的例子一樣,兩行jQuery語句是等價的,返回來的都是匹配元素的字體大小。

從1.9版本開始,css()方法還可以傳入一個多個css屬性名稱組成的數(shù)組,它會以對象形式返回多個css屬性(對象的屬性名對應(yīng)css屬性名,屬性值對應(yīng)css屬性值)

var classes = ['marginTop','marginRight','marginBottom','marginLeft'];

var css = $('.box').css(classes);

css.marginTop;  //10px


注意:當(dāng)css()方法用于獲取屬性時,只會以第一個匹配的元素為準(zhǔn),如果該元素沒有指定的屬性,則返回undefined。

(2)設(shè)置
  • 設(shè)置單個屬性

$('.box').css('fontSize','16px');


// 結(jié)果

//<div class="box" style="color:red;font-size:16px"></div>

強烈建議設(shè)置需要單位的屬性值時添加上單位,不然有可能達(dá)不到效果。

  • 回調(diào)函數(shù)
傳入回調(diào)函數(shù),它還會為函數(shù)傳入兩個參數(shù),第一個參數(shù)為當(dāng)前元素的索引,第二個參數(shù)是屬性的當(dāng)前值,函數(shù)內(nèi)的this變量指向當(dāng)前元素對應(yīng)的HTMLElement對象。

css(name,function(index,currentStyle){});


  • 以相對值設(shè)置

$('.box').css('fontSize','+=5');

// <div class="box" style="font-size:20px"></div>


$('.box').css('fontSize','-=5');

// <div class="box" style="font-size:15px"></div>


注意點
  • 如果第二個參數(shù)為空字符串,那么相當(dāng)于刪除該屬性(若屬性存在的話),而且只會刪除內(nèi)聯(lián)樣式。
  • css()方法會忽略 !important 聲明,當(dāng)需要使用該強調(diào)值時,可使用類(class)代替。

設(shè)置多個屬性
你可使用鏈?zhǔn)椒椒ㄔO(shè)置多個屬性

$('.box').css('color','green').css('backgroundColor','#000');

當(dāng)然,css()方法還提供了更便捷的方法,采用映射對象的方法

$('.box').css({'color':'green','backgroundColor':'#000'});

注意:對于一些速寫屬性,比如:margin、padding、background、border等,如果采用css()方法獲取的話,結(jié)果有可能不是所想的,所以建議通過css('marginTop')、css('marginRigt')來分別獲取,當(dāng)然,你也可以傳入一個屬性名的數(shù)組來獲取。

css()方法在獲取時,都會主動帶上必要的單位。

2.2 尺寸位置

widht()、height()、width(value)、height(value)  獲取或設(shè)置匹配元素中的第一個元素的寬度和高度

innerHeight()、innerWidth()  獲取匹配元素中的第一個元素的內(nèi)部高度和寬度,即包括內(nèi)邊距(padding),但不包括邊界(border)和外邊距(margin)

offset()  獲取匹配元素的第一個元素相對于頁面左上角的坐標(biāo)

outerHeight(boolean)、outerWidth(boolean)  獲取匹配元素中的第一個元素的高度和寬度,包括內(nèi)邊距和邊框,參數(shù)的值決定是否包括外邊框

position()  獲取匹配元素的第一個元素相對于被定位的祖輩元素左上角的坐標(biāo)

scrollLeft()、scrollTop()、scrollLeft(value)、scrollTop(value)  獲取或設(shè)置匹配元素的第一個元素的橫向或豎向滾動條的位置

width(funciton)、height(function)  使用回調(diào)函數(shù)動態(tài)設(shè)置所有匹配元素的寬度和高度

(1)width()、height()
width()方法返回元素的寬度,不包括元素的外邊距(margin)、內(nèi)邊距(padding)、邊框(border)等部分的寬度。

<div class="box"></div>


$('.box').width('20');

$('.box').width();  // 20px

width()方法和css('width')作用相似,只不過前者的返回值不帶單位(像素),后者會。

回調(diào)函數(shù)
傳入函數(shù)時,它會給函數(shù)傳遞兩個參數(shù),第一個參數(shù)是對應(yīng)當(dāng)前元素的索引,第二個參數(shù)是該屬性當(dāng)前的寬度值。

width(function(index,currentWidth){});


height()方法和width()方法的用法一樣,只不過它返回的是高度,它也不包括元素的外邊距(margin)、內(nèi)邊距(padding)、邊框(border)等部分的寬度。

(2)innerWidth()、innerHeight()
獲取匹配元素中的第一個元素的內(nèi)部高度和寬度,即包括內(nèi)邊距(padding),但不包括邊界(border)和外邊距(margin)。

innerWidth()和innerHeight()方法與width()和height()用法一樣。

從1.8版本開始,innerWidth()和innerHeight()也支持value/function參數(shù),可以設(shè)置內(nèi)寬度。

(3)outerWidth()、outerHeight()
獲取匹配元素中的第一個元素的高度和寬度,包括內(nèi)邊距和邊框,參數(shù)的值決定是否包括外邊框。

這兩個方法可傳入一個布爾值,默認(rèn)為false,也就是不包括外邊框,如果傳入true,則返回包含內(nèi)邊距、邊框和外邊框的寬度和高度。

注意:使用width()、height()、innerWidth()、innerHeight()、outerWidth()、outerHeight()這6個方法獲取高寬值時,如果jQuery對象中匹配多個元素,在返回高寬時,只會以第一個匹配的元素為準(zhǔn),如果沒有匹配的元素,則返回null。

(4)position()、offset()
position()方法獲取匹配元素的第一個元素相對于被定位(不是默認(rèn)的static)的祖輩元素(不一定是父元素)左上角的坐標(biāo),這方法返回一個坐標(biāo)對象,該對象有一個left屬性和top屬性,屬性值均為數(shù)字,單位是像素(px)。

<div class="example" style="position:absolute;top:20px;">   

  <div class="box">   

    <div class="item" style="position:absolute;top:20px;"></div>   

  </div>   

</div>


$('.item').position().top  // 20

在上面的代碼中,div.item獲取的position()是根據(jù)div.example而定的,而不是div.box。

offset()獲取匹配元素的第一個元素相對于頁面(當(dāng)前文檔)左上角的坐標(biāo),這方法也返回一個坐標(biāo)對象,該對象有一個left屬性和top屬性,屬性值均為數(shù)字,單位是像素(px)。

$('.item').offset().top  // 40


從1.4版本開始,offset()還可以設(shè)置元素的坐標(biāo)

$('.item').offset({top:20,left:10});


還可以傳入回調(diào)函數(shù),該函數(shù)傳入兩個參數(shù),第一個是當(dāng)前元素在匹配元素中的索引,第二個參數(shù)是該元素當(dāng)前的坐標(biāo)對象(包含top和left),函數(shù)的返回值就是用來設(shè)置坐標(biāo)對象。

offset(function(index,coords){})


(5)scrollLeft()、scrollTop()
scrollLeft()和scrollTop()方法是用來獲取或設(shè)置匹配元素的第一個元素的橫向或豎向滾動條的位置。

當(dāng)元素的實際高度超過其顯示區(qū)域的高度時,就會出現(xiàn)滾動條(沒有設(shè)置overflow為hidden的),此時scrollTop()返回的就是該元素在可見區(qū)域之上被隱藏分部的高度(單位:像素)

當(dāng)垂直滾動條在最上面(也就是可見區(qū)域之上沒有被隱藏的內(nèi)容)或當(dāng)前元素不可垂直滾動時,那么scrollTop()返回0。

也可以設(shè)置滾動的偏移量。

scrollTop(20)

它會向上或向下(取決于當(dāng)前被隱藏部分的高度)滾動20高度(px),也就是元素在可見區(qū)域之上被隱藏的部分高度是20px。

scrollLeft()和scrollTop()用法一樣,不過它返回的是該元素在可見區(qū)域左側(cè)被隱藏部分的寬度。

scrollLeft()也可設(shè)置:

scrollLeft(20)

它會向左或向右(取決于當(dāng)前隱藏部分的寬度)滾動20高度(px),也就是元素在可見區(qū)域左側(cè)被隱藏部分的寬度是20px。

注意:scrollTop()和scrollLeft()兩個方法在獲取時,只會針對第一個匹配元素,如果沒有匹配元素,則返回null。

3、內(nèi)容
3.1 內(nèi)容

text()、text(value)  設(shè)置或獲取當(dāng)前jQuery對象所匹配DOM元素內(nèi)的text內(nèi)容

html()、html(value)  設(shè)置或獲取當(dāng)前jQuery對象所匹配的DOM元素內(nèi)的所有內(nèi)容

text(function)、html(function)

text()方法用來設(shè)置或獲取當(dāng)前jQuery對象所匹配的DOM元素內(nèi)的text內(nèi)容。

<div class="box">   

  文本

  <span>123</span>   

</div>


$('.box').text()

// 文本

// 123

注:不同瀏覽器的HTML解析器差異,返回的文本在換行符或其他空白字符方面也可能不同。

text()還可以傳入函數(shù),它還為函數(shù)傳入兩個參數(shù),第一個參數(shù)是該元素在匹配元素中的索引,第二個參數(shù)是該元素當(dāng)前的text內(nèi)容。

text(function(index,oldText){})


html()方法用來設(shè)置或獲取當(dāng)前jQuery對象所匹配的DOM元素內(nèi)的所有內(nèi)容。

<div class="box">   

  文本<span>123</span>   

</div>


$('.box').html()

// 文本<span>123</span>

html()還可以傳入函數(shù),它還為函數(shù)傳入兩個參數(shù),第一個參數(shù)是該元素在匹配元素中的索引,第二個參數(shù)是該元素當(dāng)前的html內(nèi)容。

html(function(index,oldHtml){})


3.2 表單

val()、val(value)、val(function)  設(shè)置或獲取當(dāng)前jQuery對象所匹配的DOM元素的value值。

val()方法常用于設(shè)置或獲取表單元素的value屬性值。例如:<input>、<textarea>、<select>、<option>、<button>等。

<input type="text" id="name" value="123" />


$('#name').val()  // 123


$('#name').val('321');

$('#name').val();  // 321  

注意:當(dāng)使用val()方法獲取時,只會返回第一個匹配元素的value值。

回調(diào)函數(shù)
val()方法還可傳入函數(shù),它還會傳入兩個參數(shù),第一個參數(shù)是該元素在匹配元素中的value值,第二個參數(shù)是該元素當(dāng)前的value值,函數(shù)內(nèi)的this變量指向當(dāng)前元素的HTMLElement對象,返回值就是需要為該元素設(shè)置的value值。

val(function(index,currentValue){})


注意:當(dāng)該元素是多選的<select>元素,則返回包含所有選中值的數(shù)組。

<select multiple>   

  <option value="1" selected>1</option>   

  <option value="2" selected>2</option>   

</select>


$("select").val();  // ["1","2"]

如果select沒有選擇,則返回null。

4、關(guān)聯(lián)數(shù)據(jù)

data(key,value)、data(map)、data(key)、data()  在當(dāng)前jQuery對象所匹配的所有元素上存取數(shù)據(jù)

removeData(key)、removeData()  移除在當(dāng)前jQuery對象所匹配的每一個元素上存儲的指定鍵名的數(shù)據(jù)

(1) data()
data()方法用來在當(dāng)前jQuery對象所匹配的所有元素上存取數(shù)據(jù)。

<div class="box"></div>


$('.box').data('name','tg');

$('.box').data({'title':'tg','alt':'描述'});

$('.box').data('name')  // "tg"

$('.box').data()  // {alt:"描述",title:"tg",name:'tg'}

$('.box').data('a') // undefined

data()方法可設(shè)置單個數(shù)據(jù),也可以傳入對象形式(鍵值對)的數(shù)據(jù)設(shè)置;可獲取單個數(shù)據(jù)(傳入鍵名),也可獲取全部(不傳入任何參數(shù),如沒有一個數(shù)據(jù),則返回一個空對象)。

注意:data()方法在存儲數(shù)據(jù)時,會針對當(dāng)前jQuery對象中的每一個匹配元素,如果鍵名(key)已存在,會覆蓋原來的value值;而在讀取時,只會讀取第一個匹配的元素上的數(shù)據(jù)。

(2)removeData()
removeData()方法用來刪除數(shù)據(jù)。

$('.box').removeData('title');

$('.box').data() // {alt:'描述',name:'tg'}


當(dāng)你想刪除多個數(shù)據(jù)項時,除了一個個刪除外,你還可以傳入一個以鍵名為元素的數(shù)組。

$('.box').removeData(['alt','name']);  

$('.box').data()  // {}

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號