1. 程式人生 > >JQeury添加和刪除class內部實現代碼(簡化版)

JQeury添加和刪除class內部實現代碼(簡化版)

就是 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內部實現代碼(簡化版)