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。
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è)置
$('.box').css('fontSize','16px');
// 結(jié)果
//<div class="box" style="color:red;font-size:16px"></div>
強烈建議設(shè)置需要單位的屬性值時添加上單位,不然有可能達(dá)不到效果。
傳入回調(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){});
$('.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è)置滾動的偏移量。
它會向上或向下(取決于當(dāng)前被隱藏部分的高度)滾動20高度(px),也就是元素在可見區(qū)域之上被隱藏的部分高度是20px。
scrollLeft()和scrollTop()用法一樣,不過它返回的是該元素在可見區(qū)域左側(cè)被隱藏部分的寬度。
scrollLeft()也可設(shè)置:
它會向左或向右(取決于當(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()方法可設(shè)置單個數(shù)據(jù),也可以傳入對象形式(鍵值對)的數(shù)據(jù)設(shè)置;可獲取單個數(shù)據(jù)(傳入鍵名),也可獲取全部(不傳入任何參數(shù),如沒有一個數(shù)據(jù),則返回一個空對象)。
更多建議: