Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 1d0fcae

Browse files
committed
refactor(jqLite): refactor the attr method
The attr method was refactored to be divided into setter & getter parts and to handle boolean attributes in each one of them separately instead of dividing into boolean & non-boolean ones and then handling setter & getter in both of them. This is because handling boolean & non-boolean attributes has common parts; in particular handling of the `null` value or using getAttribute to get the value in the getter.
1 parent 924d54f commit 1d0fcae

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

src/jqLite.js

+17-15
Original file line numberDiff line numberDiff line change
@@ -638,30 +638,32 @@ forEach({
638638
},
639639

640640
attr: function(element, name, value) {
641+
var ret;
641642
var nodeType = element.nodeType;
642643
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
643644
return;
644645
}
646+
645647
var lowercasedName = lowercase(name);
646-
if (BOOLEAN_ATTR[lowercasedName]) {
647-
if (isDefined(value)) {
648-
if (value !== false && value !== null) {
649-
element.setAttribute(name, name);
650-
} else {
651-
element.removeAttribute(name);
652-
}
653-
} else {
654-
return element.getAttribute(name) != null ? lowercasedName : undefined;
655-
}
656-
} else if (isDefined(value)) {
657-
if (value === null) {
648+
var isBooleanAttr = BOOLEAN_ATTR[lowercasedName];
649+
650+
if (isDefined(value)) {
651+
// setter
652+
653+
if (value === null || (value === false && isBooleanAttr)) {
658654
element.removeAttribute(name);
659655
} else {
660-
element.setAttribute(name, value);
656+
element.setAttribute(name, isBooleanAttr ? lowercasedName : value);
661657
}
662658
} else {
663-
var ret = element.getAttribute(name);
664-
// normalize non-existing attributes to undefined (as jQuery)
659+
// getter
660+
661+
ret = element.getAttribute(name);
662+
663+
if (isBooleanAttr && ret !== null) {
664+
ret = lowercasedName;
665+
}
666+
// Normalize non-existing attributes to undefined (as jQuery).
665667
return ret === null ? undefined : ret;
666668
}
667669
},

0 commit comments

Comments
 (0)