Skip to content

Commit 4e6c14d

Browse files
committed
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 angular#15181
1 parent d5b7803 commit 4e6c14d

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/jqLite.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -640,7 +640,8 @@ forEach({
640640
attr: function(element, name, value) {
641641
var ret;
642642
var nodeType = element.nodeType;
643-
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
643+
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT ||
644+
!element.getAttribute) {
644645
return;
645646
}
646647

@@ -655,7 +656,7 @@ forEach({
655656
} else {
656657
element.setAttribute(name, isBooleanAttr ? lowercasedName : value);
657658
}
658-
} else if (element.getAttribute) {
659+
} else {
659660
// getter
660661

661662
ret = element.getAttribute(name);

test/jqLiteSpec.js

+11
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,17 @@ describe('jqLite', function() {
751751
elm.attr('multiple', '');
752752
expect(elm[0].getAttribute('multiple')).toBe('multiple');
753753
});
754+
755+
it('should not fail on elements without the getAttribute method', function() {
756+
forEach([window, document], function(node) {
757+
expect(function() {
758+
var elem = jqLite(node);
759+
elem.attr('foo');
760+
elem.attr('bar', 'baz');
761+
elem.attr('bar');
762+
}).not.toThrow();
763+
});
764+
});
754765
});
755766

756767

0 commit comments

Comments
 (0)