From 3800d177030d20c5c3d04e3601f892c46e723dc2 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Fri, 16 Sep 2011 00:56:19 +0200 Subject: feat(jqLite): add prop() support since jQuery 1.6.4 prop() became very important because attr() does't have access to certain properties any more (e.g. className), so I'm adding it to jqLite as well so that jqLite preserves the feature-set it had before the jQuery upgrade. --- src/jqLite.js | 9 +++++++++ test/jqLiteSpec.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/jqLite.js b/src/jqLite.js index 6d42bbc2..d7faa1e8 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -40,6 +40,7 @@ * - [eq()](http://api.jquery.com/eq/) * - [hasClass()](http://api.jquery.com/hasClass/) * - [parent()](http://api.jquery.com/parent/) + * - [prop()](http://api.jquery.com/prop/) * - [remove()](http://api.jquery.com/remove/) * - [removeAttr()](http://api.jquery.com/removeAttr/) * - [removeClass()](http://api.jquery.com/removeClass/) @@ -287,6 +288,14 @@ forEach({ } }, + prop: function(element, name, value) { + if (isDefined(value)) { + element[name] = value; + } else { + return element[name]; + } + }, + text: extend((msie < 9) ? function(element, value) { // NodeType == 3 is text node diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 0ebb1717..a7fded5c 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -171,6 +171,38 @@ describe('jqLite', function(){ }); + describe('prop', function() { + it('should read element property', function() { + var elm = jqLite('
a
'); + expect(elm.prop('className')).toBe('foo'); + }); + + it('should set element property to a value', function() { + var elm = jqLite('
a
'); + elm.prop('className', 'bar'); + expect(elm[0].className).toBe('bar'); + expect(elm.prop('className')).toBe('bar'); + }); + + it('should set boolean element property', function() { + var elm = jqLite(''); + expect(elm.prop('checked')).toBe(false); + + elm.prop('checked', true); + expect(elm.prop('checked')).toBe(true); + + elm.prop('checked', ''); + expect(elm.prop('checked')).toBe(false); + + elm.prop('checked', 'lala'); + expect(elm.prop('checked')).toBe(true); + + elm.prop('checked', null); + expect(elm.prop('checked')).toBe(false); + }); + }); + + describe('class', function(){ describe('hasClass', function(){ -- cgit v1.2.3