Heim  >  Artikel  >  Web-Frontend  >  Analyse der Methode „removeAttr()“ des jQuery-Quellcodes „interpretation_jquery“.

Analyse der Methode „removeAttr()“ des jQuery-Quellcodes „interpretation_jquery“.

WBOY
WBOYOriginal
2016-05-16 16:13:311259Durchsuche

In diesem Artikel wird die Methode „removeAttr()“ zur Interpretation des jQuery-Quellcodes detaillierter analysiert. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:

Methoden, die das jQuery-Prototypobjekt erweitern:

Code kopieren Der Code lautet wie folgt:
jQuery.fn.extend({
//Name, übergebe den Attributnamen des zu entfernenden DOM-Elements.
​ RemoveAttr: Funktion( Name) {

//Verwenden Sie das jQuery.fn-Objekt, d. h. jede Methode des jQuery-Prototypobjekts, um das vom aktuellen Selektor ausgewählte jQuery-Objektarray zu durchlaufen und das jQuery-Objekt für den Kettenaufruf zurückzugeben.
          return this.each(function() {
// Rufen Sie die globale Methode „removeAttr“ von jQuery auf und übergeben Sie dem durchlaufenen DOM-Objekt this und den Namen des zu entfernenden Attributs.
jQuery.removeAttr( this, name );
        });
}
});

jQuerys globale Methode „removAttr“

Code kopieren Der Code lautet wie folgt:
//Erweitern Sie die globale Methode des jQuery-Objekts
jQuery.extend({

//elem ist jedes durchlaufene DOM-Objekt und value ist der zu entfernende Attributname.
​ removeAttr: function(elem, value) {
        var name, propName,
            i = 0,
//rnotwhite ist (/S /g)
//Wenn der Wert „“ ist, ist der Wert des logischen UND-Ausdrucks null
//Wenn angenommen wird, dass der Wert „title href“ ist, da keiner der Operanden des logischen AND-Operators ein boolescher Wert ist, wird der zweite Operand zurückgegeben. Zu diesem Zeitpunkt ist attrNames [„title“, „href“].
//match ist eine JavaScript-String-Methode, die einen angegebenen Wert innerhalb einer Zeichenfolge abruft oder eine Übereinstimmung für einen oder mehrere reguläre Ausdrücke findet und ein Array zurückgibt, in dem die übereinstimmenden Ergebnisse gespeichert sind. Andere Typen melden Fehler.
               attrNames = value && value.match( rnotwhite );
//Wenn attrNames nicht null ist und der Knotentyp des aktuellen DOM-Objekts 1 ist, geben Sie den if-Anweisungsblock ein, andernfalls verlassen Sie die Funktion, beenden Sie diesen Durchlauf und starten Sie den nächsten Durchlauf.
If ( attrNames && elem.nodeType === 1 ) {
//Zu diesem Zeitpunkt ist attrNames ein Array, das die zu entfernenden Attributnamen enthält, also ["title", "href"]
//Führen Sie die while-Schleife aus. Nehmen Sie zuerst ein Element aus attrNames heraus und weisen Sie es dem Namen zu. Erhöhen Sie i um 1 und bestimmen Sie dann, ob der Name einen Wert hat. Geben Sie die Schleife ein Nachdem die Ausführung abgeschlossen ist, beginnt die nächste Schleife, bis der Name keinen Wert mehr hat.
               while ( (name = attrNames[i ]) ) {
//Wenn der Attributname denselben Namen wie das js-Schlüsselwort hat, z. B. „for“ und „class“, ersetzen Sie ihn durch „htmlFor“ und „className“.
                     propName = jQuery.propFix[ name ] || name;

//Wenn es sich um ein boolesches Attribut handelt, Sonderbehandlung
If ( jQuery.expr.match.bool.test( name ) ) {
//getSetInput erkennt, ob das Input-Element getAttribute("value")
unterstützt //getSetAttribute erkennt, ob das Festlegen des Attributnamens im Kamel-Case-Namensformat unterstützt wird
//!ruseDefault.test( name ) unterscheidet nicht zwischen Groß- und Kleinschreibung und erkennt, ob name ein aktiviertes oder ausgewähltes Attribut ist,
If ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
// Durch das Entfernen des booleschen Attributs wird dem booleschen Attribut tatsächlich der Wert false
zugewiesen Zu                       } sonst {
//Unterstützt ie9 und niedriger
//Konvertieren Sie das Attribut „default-checked“ in „defaultChecked“ und weisen Sie den Wert false zu
                                  elem[ jQuery.camelCase( "default-" name ) ] =
                                                                                                                                                                                                  }
                     } sonst {
//Wenn es sich nicht um ein boolesches Attribut handelt, rufen Sie die globale attr-Methode von jQuery auf, um das Attribut
festzulegen jQuery.attr(elem, name, "");
                }
//getSetAttribute wird verwendet, um zu testen, ob setAttribute das Festlegen von Attributnamen im Camel-Case-Namensformat unterstützt. Wenn ja, müssen Sie den korrigierten Attributnamen verwenden, wenn Sie setAttribute und getAttribute verwenden. (Kompatibel mit ie6/7)
//Wenn getSetAttibute gleich false ist, bedeutet dies, dass es nicht unterstützt wird und der geänderte Attributname verwendet wird. Wenn er unterstützt wird, wird der ursprüngliche Attributname verwendet.
//Rufen Sie die native DOM-Methode „removeAttribute“ auf, um das Attribut
zu entfernen                     elem.removeAttribute( getSetAttribute ? name : propName );
            }
}
}
});

Korrektur des Keyword-Attributs



Code kopieren Der Code lautet wie folgt:
jQuery.extend({
    propFix : {
        "pour": "htmlPour",
        "class": "nom de classe"
    >
});
jQuery.extend({
    camelCase : fonction (chaîne) {
        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;
// Configuration
div = document.createElement( "div" );
div.setAttribute( "className", "t" );
div.innerHTML = " 
a";
a = div.getElementsByTagName("a")[ 0 ];
// Premier lot de tests.
select = document.createElement("select");
opt = select.appendChild( document.createElement("option") );
input = div.getElementsByTagName("input")[ 0 ];
a.style.cssText = "top:1px";
// Test setAttribute sur la classe camelCase. Si cela fonctionne, nous avons besoin d'attrFixes lors de l'exécution de get/setAttribute (ie6/7)
support.getSetAttribute = div.className !== "t";

检测input是否支持getAttribute("value")

复制代码 代码如下 :
// Prise en charge : IE8 uniquement
// Vérifiez si nous pouvons faire confiance à getAttribute("value")
input = document.createElement( "input" );
input.setAttribute( "value", "" );
support.input = input.getAttribute( "value" ) === "";

检测是否布尔值属性

复制代码 代码如下 :
booleans = "checked|selected|async|autofocus|autoplay|controls| différer|désactivé|caché|ismap|loop|multiple|open|readonly|obligatoire|scoped",

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

希望本文所述对大家的jQuery程序设计有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn