jQuery replaceClass

2013-05-28

Det finns en funktion jag saknar i jQuery core och det är replaceClass. Jag vill byta ut en klass mot en annan, och skulle vilja slippa att göra följande:
$(object).removeClass("x").addClass("y");
För att öka läsbarheten i min kod så skulle det vara enklare att läsa följande:
$(object).replaceClass("x", "y");
Nu verkar det finnas en slags koncencus att replaceClass inte skall införas i core, då allt för få ser någon anledning till att införa detta. Synd tycker jag.

Men jag har själv skrivit följande och använder i mina projekt där jag behöver. Det är ju enkelt att infoga kod i jQuery:


 jQuery.fn.extend({
  replaceClass: function( replaceFrom, replaceTo ) {
   return this.each( function() {
    var $this = $(this);
    if ($this.hasClass(replaceFrom)) {
     $this.removeClass( replaceFrom ).addClass( replaceTo );
    }
   });
  }
 });

Då blir det en enkel sak att byta ut en klass. Exempel:


<html>
....

<ul><li class="x">asdfasdf</li>
<ul><li class="x">asdfasdf2</li>
</ul>
<script>

function performReplace() {
 $("ul li").replaceClass("x","y");
}
(function() { $("button").click( performReplace ); })();
</script>
...

Jag tycker att läsbarheten i funktionen performReplace blir avsevärt mycket bättre – inga if-satser, inga krångligheter. Du gör en vanlig jQuery selektering och utför en replaceClass på resultatet. Precis på samma sätt som addClass, eller vilken annan jQuery funktion som helst.
Det som kan diskuteras är ju argumenten – hur vet jag vilken som är vilket? Det torde vara standard från alla andra skript-språk: Det första argumentet är alltid de facto vilken funktionen skall agera på och det andra argumentet vad som skall utföras när det första resulterar i ‘true’, dvs det första argumentet är VAD som skall ersättas och det andra vad det skall ersättas MED.

Solklart?