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

Commit 181e5eb

Browse files
RobiFerentzpetebacondarwin
authored andcommitted
fix(jqLite): attr should ignore comment, text and attribute nodes
Follow jQuery handling of the `attr` function Close #11038
1 parent 8743924 commit 181e5eb

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
@@ -94,6 +94,7 @@
9494
"skipDestroyOnNextJQueryCleanData": true,
9595

9696
"NODE_TYPE_ELEMENT": false,
97+
"NODE_TYPE_ATTRIBUTE": false,
9798
"NODE_TYPE_TEXT": false,
9899
"NODE_TYPE_COMMENT": false,
99100
"NODE_TYPE_COMMENT": false,

src/Angular.js

+2
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
createMap: true,
8686
8787
NODE_TYPE_ELEMENT: true,
88+
NODE_TYPE_ATTRIBUTE: true,
8889
NODE_TYPE_TEXT: true,
8990
NODE_TYPE_COMMENT: true,
9091
NODE_TYPE_DOCUMENT: true,
@@ -1611,6 +1612,7 @@ function createMap() {
16111612
}
16121613

16131614
var NODE_TYPE_ELEMENT = 1;
1615+
var NODE_TYPE_ATTRIBUTE = 2;
16141616
var NODE_TYPE_TEXT = 3;
16151617
var NODE_TYPE_COMMENT = 8;
16161618
var NODE_TYPE_DOCUMENT = 9;

src/jqLite.js

+4
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,10 @@ forEach({
598598
},
599599

600600
attr: function(element, name, value) {
601+
var nodeType = element.nodeType;
602+
if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
603+
return;
604+
}
601605
var lowercasedName = lowercase(name);
602606
if (BOOLEAN_ATTR[lowercasedName]) {
603607
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)