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:
Michał Gołębiowski
2016-10-05 12:31:28 +02:00
parent d5b7803064
commit 4e6c14dcae
2 changed files with 14 additions and 2 deletions
+3 -2
View File
@@ -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);
+11
View File
@@ -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();
});
});
});