jQuery源碼解讀之removeClass()方法分析
更新時(shí)間:2015年02月20日 11:38:14 作者:novaline
這篇文章主要介紹了jQuery源碼解讀之removeClass()方法,以注釋形式較為詳細(xì)的分析了removeClass()方法的實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下
本文較為詳細(xì)的分析了jQuery源碼解讀之removeClass()方法。分享給大家供大家參考。具體分析如下:
removeClass()方法和addClass()差別不大。這就來看看:
復(fù)制代碼 代碼如下:
jQuery.fn.extend({
removeClass: function( value ) {
var classes, elem, cur, clazz, j, finalValue,
i = 0,
len = this.length,
proceed = arguments.length === 0 || typeof value === "string" && value;
if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
//這里就是根據(jù)你傳遞的移除類名的函數(shù)返回的類名,再次調(diào)用removeClass自身了。
jQuery( this ).removeClass( value.call( this, j, this.className ) );
});
}
if ( proceed ) {
classes = ( value || "" ).match( rnotwhite ) || [];
for ( ; i < len; i++ ) {
elem = this[ i ];
cur = elem.nodeType === 1 && ( elem.className ?
( " " + elem.className + " " ).replace( rclass, " " ) :
""
);
if ( cur ) {
j = 0;
while ( (clazz = classes[j++]) ) {
//區(qū)別在下面的while循環(huán),當(dāng)檢索到當(dāng)前DOM元素包含你要移除的類名,會用replace替換成" "
while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
cur = cur.replace( " " + clazz + " ", " " );
}
}
//下面也是關(guān)鍵區(qū)別之一,判斷你是否傳遞了要移除的類名value。如果沒有傳遞,則finalValue="",如果此時(shí)DOM元素有類名的話,也就是條件為true,移除DOM元素的所有類名;
//如果傳遞了,則移除匹配的類名,移除后,沒有移除的類名拼接成了cur,去掉左右兩端的空格字符串,將DOM元素的類名設(shè)置成cur。
finalValue = value ? jQuery.trim( cur ) : "";
if ( elem.className !== finalValue ) {
elem.className = finalValue;
}
}
}
}
return this;
}
});
removeClass: function( value ) {
var classes, elem, cur, clazz, j, finalValue,
i = 0,
len = this.length,
proceed = arguments.length === 0 || typeof value === "string" && value;
if ( jQuery.isFunction( value ) ) {
return this.each(function( j ) {
//這里就是根據(jù)你傳遞的移除類名的函數(shù)返回的類名,再次調(diào)用removeClass自身了。
jQuery( this ).removeClass( value.call( this, j, this.className ) );
});
}
if ( proceed ) {
classes = ( value || "" ).match( rnotwhite ) || [];
for ( ; i < len; i++ ) {
elem = this[ i ];
cur = elem.nodeType === 1 && ( elem.className ?
( " " + elem.className + " " ).replace( rclass, " " ) :
""
);
if ( cur ) {
j = 0;
while ( (clazz = classes[j++]) ) {
//區(qū)別在下面的while循環(huán),當(dāng)檢索到當(dāng)前DOM元素包含你要移除的類名,會用replace替換成" "
while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
cur = cur.replace( " " + clazz + " ", " " );
}
}
//下面也是關(guān)鍵區(qū)別之一,判斷你是否傳遞了要移除的類名value。如果沒有傳遞,則finalValue="",如果此時(shí)DOM元素有類名的話,也就是條件為true,移除DOM元素的所有類名;
//如果傳遞了,則移除匹配的類名,移除后,沒有移除的類名拼接成了cur,去掉左右兩端的空格字符串,將DOM元素的類名設(shè)置成cur。
finalValue = value ? jQuery.trim( cur ) : "";
if ( elem.className !== finalValue ) {
elem.className = finalValue;
}
}
}
}
return this;
}
});
希望本文所述對大家的jQuery程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:
- 使用JS實(shí)現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能
- jQuery使用addClass()方法給元素添加多個(gè)class樣式
- jQuery中addClass()方法用法實(shí)例
- Jquery.addClass始終無效原因分析
- jQuery源碼解讀之a(chǎn)ddClass()方法分析
- jQuery中removeClass()方法用法實(shí)例
- jQuery使用removeClass方法刪除元素指定Class的方法
- jQuery中toggleClass()方法用法實(shí)例
- jQuery使用toggleClass方法動態(tài)添加刪除Class樣式的方法
- 用jQuery toggleClass 實(shí)現(xiàn)鼠標(biāo)移上變色
- JQuery使用屬性addClass、removeClass和toggleClass實(shí)現(xiàn)增加和刪除類操作示例
相關(guān)文章
jquery實(shí)現(xiàn)垂直手風(fēng)琴菜單
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)垂直手風(fēng)琴菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
jQuery中Ajax全局事件引用方式及各個(gè)事件(全局/局部)執(zhí)行順序
這篇文章主要介紹了jQuery中Ajax全局事件引用方式及各個(gè)事件(全局/局部)執(zhí)行順序的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06
Jquery 實(shí)現(xiàn)table樣式的設(shè)定
這篇文章主要介紹了Jquery 實(shí)現(xiàn)table樣式的設(shè)定方法的相關(guān)資料,需要的朋友可以參考下2015-01-01
jQuery遍歷DOM節(jié)點(diǎn)操作之filter()方法詳解
這篇文章主要介紹了jQuery遍歷DOM節(jié)點(diǎn)操作之filter()方法,結(jié)合實(shí)例形式詳細(xì)分析了filter的功能及4種具體用法,需要的朋友可以參考下2016-04-04
jQuery+CSS3實(shí)現(xiàn)點(diǎn)贊功能
本篇文章主要介紹了jQuery+CSS3實(shí)現(xiàn)點(diǎn)贊功能的示例代碼。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
基于jquery的二級聯(lián)動菜單實(shí)現(xiàn)代碼
基于jquery的二級聯(lián)動菜單實(shí)現(xiàn)代碼,腳本之家簡單整理了幾種。需要的朋友可以參考下,主要是思路2011-04-04

