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

Commit bb5bf7f

Browse files
RobiFerentzlgalfaso
authored andcommitted
fix(jqLite): attr should ignore comment, text and attribute nodes
Follow jQuery handling of the `attr` function Close #11038
1 parent 1924cf2 commit bb5bf7f

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

src/.jshintrc

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
"skipDestroyOnNextJQueryCleanData": true,
9797

9898
"NODE_TYPE_ELEMENT": false,
99+
"NODE_TYPE_ATTRIBUTE": false,
99100
"NODE_TYPE_TEXT": false,
100101
"NODE_TYPE_COMMENT": false,
101102
"NODE_TYPE_COMMENT": false,

src/Angular.js

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
createMap: true,
8989
9090
NODE_TYPE_ELEMENT: true,
91+
NODE_TYPE_ATTRIBUTE: true,
9192
NODE_TYPE_TEXT: true,
9293
NODE_TYPE_COMMENT: true,
9394
NODE_TYPE_DOCUMENT: true,
@@ -1737,6 +1738,7 @@ function createMap() {
17371738
}
17381739

17391740
var NODE_TYPE_ELEMENT = 1;
1741+
var NODE_TYPE_ATTRIBUTE = 2;
17401742
var NODE_TYPE_TEXT = 3;
17411743
var NODE_TYPE_COMMENT = 8;
17421744
var NODE_TYPE_DOCUMENT = 9;

src/jqLite.js

+4
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ forEach({
587587
},
588588

589589
attr: function(element, name, value) {
590+
var nodeType = element.nodeType;
591+
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
592+
return;
593+
}
590594
var lowercasedName = lowercase(name);
591595
if (BOOLEAN_ATTR[lowercasedName]) {
592596
if (isDefined(value)) {

test/jqLiteSpec.js

+24
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,30 @@ describe('jqLite', function() {
612612
expect(elm.attr('readOnly')).toBeUndefined();
613613
expect(elm.attr('disabled')).toBeUndefined();
614614
});
615+
616+
it('should do nothing when setting or getting on attribute nodes', function() {
617+
var attrNode = jqLite(document.createAttribute('myattr'));
618+
expect(attrNode).toBeDefined();
619+
expect(attrNode[0].nodeType).toEqual(2);
620+
expect(attrNode.attr('some-attribute','somevalue')).toEqual(attrNode);
621+
expect(attrNode.attr('some-attribute')).toBeUndefined();
622+
});
623+
624+
it('should do nothing when setting or getting on text nodes', function() {
625+
var textNode = jqLite(document.createTextNode('some text'));
626+
expect(textNode).toBeDefined();
627+
expect(textNode[0].nodeType).toEqual(3);
628+
expect(textNode.attr('some-attribute','somevalue')).toEqual(textNode);
629+
expect(textNode.attr('some-attribute')).toBeUndefined();
630+
});
631+
632+
it('should do nothing when setting or getting on comment nodes', function() {
633+
var comment = jqLite(document.createComment('some comment'));
634+
expect(comment).toBeDefined();
635+
expect(comment[0].nodeType).toEqual(8);
636+
expect(comment.attr('some-attribute','somevalue')).toEqual(comment);
637+
expect(comment.attr('some-attribute')).toBeUndefined();
638+
});
615639
});
616640

617641

0 commit comments

Comments
 (0)