JQeury添加和刪除class內部實現代碼(簡化版)
阿新 • • 發佈:2017-11-25
就是 while bsp span indexof val 元素 move 添加
下面是JQuery對元素class操作的簡單實現,請看代碼:
添加class:
//增加class function addClass(elem,value) { var classes, cur, clazz, j, finalValue // 如果參數是多個樣式設置"a b c"按照\/S+\g空格分割 classes = (value || "").match(/\S+/g) || []; //如果是元素節點,並且有class屬性 //拼接成 " a b c "形式,加上前後空格 cur = elem.nodeType === 1 && (elem.className ? (" " + elem.className + " ").replace(/[\t\r\n\f]/g, " ") : " " ); //如果存在樣式 if (cur) { j = 0; while ((clazz = classes[j++])) { //查找下是否不是有重復的,沒有就疊加 if (cur.indexOf(" " + clazz + " ") < 0) { cur += clazz + " "; } }// 去掉前後的空格 finalValue = jQuery.trim(cur); if (elem.className !== finalValue) { //賦值 elem.className = finalValue; } } }
移除class:
//移除樣式 function removeClass(elem, value) { var classes, cur, clazz, j, finalValue// 如果參數是多個樣式設置"a b c"按照\/S+\g空格分割 classes = (value || "").match(/\S+/g) || []; //如果是元素節點,並且有class屬性 //拼接成 " a b c "形式,加上前後空格 cur = elem.nodeType === 1 && (elem.className ? (" " + elem.className + " ").replace(/[\t\r\n\f]/g, " ") : " " ); //如果存在樣式 if (cur) { j = 0; while ((clazz = classes[j++])) { //與addClass的區別在這裏 while (cur.indexOf(" " + clazz + " ") >= 0) { cur = cur.replace(" " + clazz + " ", " "); } } // 去掉前後的空格 finalValue = jQuery.trim(cur); if (elem.className !== finalValue) { //賦值 elem.className = finalValue; } } }
其實原理就是通過元素原生className屬性獲得元素class值(一串字符),然後對這串字符進行各種奇淫技巧拼接,最後再賦值到元素的className屬性。
JQeury添加和刪除class內部實現代碼(簡化版)