New jquery.getAttrs module
authorKrinkle <krinkle@users.mediawiki.org>
Wed, 13 Jul 2011 22:46:17 +0000 (22:46 +0000)
committerKrinkle <krinkle@users.mediawiki.org>
Wed, 13 Jul 2011 22:46:17 +0000 (22:46 +0000)
- A cross-browser compatible way of getting a direct key/value object of attributes
- Will help making comparisons such as in r92113 easier and work cross-browser

resources/Resources.php
resources/jquery/jquery.getAttrs.js [new file with mode: 0644]
tests/qunit/index.html
tests/qunit/suites/resources/jquery/jquery.getAttrs.js [new file with mode: 0644]

index 9bc4b8f..4f01b7c 100644 (file)
@@ -114,6 +114,9 @@ return array(
        'jquery.form' => array(
                'scripts' => 'resources/jquery/jquery.form.js',
        ),
+       'jquery.getAttrs' => array(
+               'scripts' => 'resources/jquery/jquery.getAttrs.js',
+       ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/jquery/jquery.highlightText.js',
        ),
diff --git a/resources/jquery/jquery.getAttrs.js b/resources/jquery/jquery.getAttrs.js
new file mode 100644 (file)
index 0000000..c05012d
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * Utility to get all attributes of an element directy as an object.
+ *
+ * @author Timo Tijhof, 2011
+ */
+jQuery.fn.getAttrs = function( all ) {
+       var     map = this[0].attributes,
+               attrs = {},
+               len = map.length,
+               i, v;
+
+       for ( i = 0; i < len; i++ ) {
+               // IE6 includes *all* allowed attributes for thew element (including those
+               // not set). Those have values like undefined, null, 0, false, "" or "inherit".
+               // However there may be genuine attributes set to that. If you need them,
+               // set all to true. They are excluded by default.
+               v = map[i].nodeValue;
+               if ( all || ( v && v !== 'inherit' ) ) {
+                       attrs[ map[i].nodeName ] = v;
+               }
+       }
+
+       return attrs;
+};
index 81fe7ec..f0db23c 100644 (file)
@@ -43,6 +43,7 @@
        <script src="../../resources/jquery/jquery.byteLength.js"></script>
        <script src="../../resources/jquery/jquery.byteLimit.js"></script>
        <script src="../../resources/jquery/jquery.colorUtil.js"></script>
+       <script src="../../resources/jquery/jquery.getAttrs.js"></script>
        <script src="../../resources/jquery/jquery.localize.js"></script>
        <script src="../../resources/jquery/jquery.tabIndex.js"></script>
        <script src="../../resources/jquery/jquery.tablesorter.js"></script>
@@ -68,6 +69,7 @@
        <script src="suites/resources/jquery/jquery.byteLength.js"></script>
        <script src="suites/resources/jquery/jquery.byteLimit.js"></script>
        <script src="suites/resources/jquery/jquery.colorUtil.js"></script>
+       <script src="suites/resources/jquery/jquery.getAttrs.js"></script>
        <script src="suites/resources/jquery/jquery.localize.js"></script>
        <script src="suites/resources/jquery/jquery.tabIndex.js"></script>
        <script src="suites/resources/jquery/jquery.tablesorter.test.js" charset="UTF-8"></script>
diff --git a/tests/qunit/suites/resources/jquery/jquery.getAttrs.js b/tests/qunit/suites/resources/jquery/jquery.getAttrs.js
new file mode 100644 (file)
index 0000000..3d3d01e
--- /dev/null
@@ -0,0 +1,17 @@
+module( 'jquery.getAttrs.js' );
+
+test( '-- Initial check', function() {
+       expect(1);
+       ok( $.fn.getAttrs, 'jQuery.fn.getAttrs defined' );
+} );
+
+test( 'Check', function() {
+       expect(1);
+       var     attrs = {
+                       foo: 'bar',
+                       'class': 'lorem'
+               },
+               $el = $( '<div>', attrs );
+
+       deepEqual( $el.getAttrs(), attrs, 'getAttrs() return object should match the attributes set, no more, no less' );
+} );