feat(jqLite): don't throw for elements with missing getAttribute
jQuery falls back to prop here but this feature is not very well tested & documented so let's just skip it here. Closes #15181
This commit is contained in:
+3
-2
@@ -640,7 +640,8 @@ forEach({
|
||||
attr: function(element, name, value) {
|
||||
var ret;
|
||||
var nodeType = element.nodeType;
|
||||
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
|
||||
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT ||
|
||||
!element.getAttribute) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -655,7 +656,7 @@ forEach({
|
||||
} else {
|
||||
element.setAttribute(name, isBooleanAttr ? lowercasedName : value);
|
||||
}
|
||||
} else if (element.getAttribute) {
|
||||
} else {
|
||||
// getter
|
||||
|
||||
ret = element.getAttribute(name);
|
||||
|
||||
@@ -751,6 +751,17 @@ describe('jqLite', function() {
|
||||
elm.attr('multiple', '');
|
||||
expect(elm[0].getAttribute('multiple')).toBe('multiple');
|
||||
});
|
||||
|
||||
it('should not fail on elements without the getAttribute method', function() {
|
||||
forEach([window, document], function(node) {
|
||||
expect(function() {
|
||||
var elem = jqLite(node);
|
||||
elem.attr('foo');
|
||||
elem.attr('bar', 'baz');
|
||||
elem.attr('bar');
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user