jQuery 소스 판독의removeAttr () 방법 분석

5041 단어
본고는 jQuery 소스 해석의removeAttr() 방법을 비교적 상세하게 분석했다.여러분에게 참고하도록 공유하다.구체적인 분석은 다음과 같다.
jQuery 원형 객체를 확장하는 방법:

   jQuery.fn.extend({ 
  
//name, DOM 。
    removeAttr: function( name ) {

// jQuery.fn , jQuery each jQuery , jQuery 。
        return this.each(function() {
// jQuery removeAttr, DOM this name。
            jQuery.removeAttr( this, name );
        });
    }
});


jQuery의 전역 방법removeAttr

   //  jQuery        
  
jQuery.extend({

//elem DOM ,value 。
    removeAttr: function( elem, value ) {
        var name, propName,
            i = 0,
//rnotwhite (/\S+/g)
// value " ", null
// value "title href", , , attrNames ["title", "href"]。
//match JavaScript , , , 。 。
            attrNames = value && value.match( rnotwhite );
// attrNames null, DOM 1, if , , , 。
        if ( attrNames && elem.nodeType === 1 ) {
// attrNames , ["title", "href"]
// while , , attrNames name, i 1, name , , , , name , 。
            while ( (name = attrNames[i++]) ) {
// js "for" "class", "htmlFor" "className"。
                propName = jQuery.propFix[ name ] || name;

//
                if ( jQuery.expr.match.bool.test( name ) ) {
//getSetInput Input getAttribute("value")
//getSetAttribute
//!ruseDefault.test( name ) name checked selected ,
                    if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
// false
                        elem[ propName ] = false;
                    } else {
// ie9
// "default-checked" "defaultChecked", false
                        elem[ jQuery.camelCase( "default-" + name ) ] =
                            elem[ propName ] = false;
                    }
                } else {
// , jQuery attr
                    jQuery.attr( elem, name, "" );
                }
//getSetAttribute setAttribute , , setAttribute getAttribute , 。( ie6/7)
// getSetAttibute false, , , , 。
// DOM removeAttribute ,
                elem.removeAttribute( getSetAttribute ? name : propName );
            }
        }
    }
});


키워드 속성 수정

   jQuery.extend({ 
  
    propFix: {
        "for": "htmlFor",
        "class": "className"
    }
});
jQuery.extend({
    camelCase: function( string ) {
        return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
    }
});
var nodeHook, boolHook,
    attrHandle = jQuery.expr.attrHandle,
    ruseDefault = /^(?:checked|selected)$/i,
    getSetAttribute = support.getSetAttribute,
    getSetInput = support.input;
// Setup
div = document.createElement( "div" );
div.setAttribute( "className", "t" );
div.innerHTML = "  a";
a = div.getElementsByTagName("a")[ 0 ];
// First batch of tests.
select = document.createElement("select");
opt = select.appendChild( document.createElement("option") );
input = div.getElementsByTagName("input")[ 0 ];
a.style.cssText = "top:1px";
// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
support.getSetAttribute = div.className !== "t";

input getAttribute("value")


   // Support: IE8 only 
  
// Check if we can trust getAttribute("value")
input = document.createElement( "input" );
input.setAttribute( "value", "" );
support.input = input.getAttribute( "value" ) === "";
브리치 속성 검사 여부

   booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 
   
  

matchExpr = {
    "bool": new RegExp( "^(?:" + booleans + ")$", "i" )
},

는 본고에서 기술한 바와 같이 여러분의 jQuery 프로그램 설계에 도움이 되었으면 합니다.

좋은 웹페이지 즐겨찾기