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:
//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“
//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
检测input是否支持getAttribute("value")
检测是否布尔值属性
matchExpr = {
"bool": new RegExp( "^(?:" booléens ")$", "i" )
},
希望本文所述对大家的jQuery程序设计有所帮助。