Added ifelse method, fixed bug #160 for IE6
authorJörn Zaefferer <joern.zaefferer@gmail.com>
Mon, 2 Oct 2006 16:15:33 +0000 (16:15 +0000)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Mon, 2 Oct 2006 16:15:33 +0000 (16:15 +0000)
src/jquery/jquery.js

index 70c3c60..829ef4a 100644 (file)
@@ -1047,6 +1047,7 @@ jQuery.fn = jQuery.prototype = {
         * @example $("p").not("#selected")
         * @before <p>Hello</p><p id="selected">Hello Again</p>
         * @result [ <p>Hello</p> ]
+        *
         * @test ok($("#main > p#ap > a").not("#google").length == 2, ".not")
         *
         * @name not
@@ -1157,6 +1158,52 @@ jQuery.fn = jQuery.prototype = {
        is: function(expr) {
                return expr ? jQuery.filter(expr,this).r.length > 0 : false;
        },
+       
+       /**
+        * Executes the first callback for every element that fits the expression
+        * and executes the second callback for every element that does not fit
+        * the expression.
+        *
+        * @example $('div').ifelse(':visible',
+     *   function() { $(this).slideUp(); },
+         function() { $(this).slideDown(); }
+     * );
+        * @desc Slides down all visible div elements and slides down all others
+        * 
+        * @test var checked = 0, notChecked = 0;
+        * var inputChecked = $(':input').ifelse(':checked',
+        *   function() { checked++; },
+        *   function() { notChecked++ }
+        * );
+        * ok( checked == 2, 'Check is if/else: Count checked elements' );
+        * ok( notChecked == 12, 'Check is if/else: Count unchecked elements' );
+        *
+        * $('#first, #foo, #ap').ifelse('p',
+        *   function() { $(this).html('me == p') },
+        *   function() { $(this).html('me != p') }
+        * );
+        * ok( $('#first').text() == 'me == p', 'Check filter-if-clause' );
+        * ok( $('#foo').text() == 'me != p', 'Check else-clause' );
+        * ok( $('#ap').text() == 'me == p', 'Check filter-if-clause' );
+        *
+        * @name ifelse
+        * @type jQuery
+        * @param String expression The expression with which to filter
+        * @param Function ifCallback Called for elements that fit the expression
+        * @param Function elseCallback Called for elements that don't fit the expression
+        * @cat DOM/Traversing
+        */
+       ifelse: function(expr, ifCallback, elseCallback) {
+               var ifCallback = ifCallback || function() {};
+        var elseCalllback = elseCallback || function() {};
+        return this.each(function() {
+            if($(this).is(expr)) {
+                ifCallback.apply(this);
+            } else {
+                elseCallback.apply(this);
+            }
+        });
+       },
 
        /**
         *
@@ -1824,6 +1871,8 @@ jQuery.extend({
                if ( fix[name] ) {
                        if ( value != undefined ) elem[fix[name]] = value;
                        return elem[fix[name]];
+               } else if( value == undefined && $.browser.msie && elem.nodeName && elem.nodeName.toUpperCase() == 'FORM' && (name == 'action' || name == 'method') ) {
+                       return elem.getAttributeNode(name).nodeValue;
                } else if ( elem.getAttribute != undefined ) {
                        if ( value != undefined ) elem.setAttribute( name, value );
                        return elem.getAttribute( name, 2 );