From: Jörn Zaefferer Date: Mon, 2 Oct 2006 16:15:33 +0000 (+0000) Subject: Added ifelse method, fixed bug #160 for IE6 X-Git-Url: http://git.asbjorn.biz/?p=jquery.git;a=commitdiff_plain;h=feabeb8572979f7888bd73e80f436bece1448e5a Added ifelse method, fixed bug #160 for IE6 --- diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 70c3c60..829ef4a 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -1047,6 +1047,7 @@ jQuery.fn = jQuery.prototype = { * @example $("p").not("#selected") * @before

Hello

Hello Again

* @result [

Hello

] + * * @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 );