2015-12-19 9 views
6

私は自分のSwitcher jQueryを作成して、別の色をクリックするとクラスを削除したいと思います。たとえば、bodyタグに青色のクラスがあり、赤色をクリックすると青いクラスが削除され、など。
addClassとremoveClassを使用してクラスを切り替える方法は?

コード:

$("body").addClass("wide light blue"); 

// Switcher jQuery Plugin 
$(".switcher-toggle").click(function() { 
    $("#switcher").toggleClass("open"); 
}); 

// Theme Layout Switch 
$(".layout").change(function() { 
    var layout = $(".layout").val(); 
    $(".wrapper").css("width",layout); 
}); 

// Theme Skins Switch 
$(".skins").change(function() { 
    var skin = $(".skins").val(); 
    $("body").toggleClass(skin); 
}); 

// Theme Colors Switch 
$(".colors span").each(function() { 
    var data_color = $(this).attr("data-color"); 
    $(this).click(function() { 
     $("body").toggleClass(data_color); 
    }); 
}); 

デモ: https://jsfiddle.net/uikithemes/p18cqa5s/

+0

をあなたは本当に 'wide'、何のために' light'クラスを使用して、それが動作するはずのようなので、ちょうどすべてのクラスを削除すると思わしていない - > https://でjsfiddle。 net/adeneo/p18cqa5s/6/ – adeneo

+0

はい、あなたは正しいです!ありがとう:) –

答えて

2

まずdocument.readyイベント内のコードを入れていることを確認してください、あなたはクリックハンドラ内で直接data-color属性にアクセスすることができますようeach()ループが冗長であることに注意してください。

第2に、addClassで新しいクラスを追加する前に、removeClassを使用して削除するすべてのクラスのスペース区切りリストを提供することができます。色が追加または削除されている場合は、これは維持するために少し困難になることが

$(".colors span").click(function() { 
    $("body") 
     .removeClass('blue red green orange carrot violet pink gold') 
     .addClass($(this).data("color")); 
}); 

Updated fiddle

:これを試してみてください。より良いパターンは、オプションが選択されるか、または色がクリックされるたびに、body要素にクラスを設定する単一の関数を呼び出すことです。新しい色を設定する.toggleClass()を呼び出す前bodyの最後のclassNameセットを選択するには、パラメータ-1.slice()、パラメータ" "で、.split()を使用してbody要素classNameから設定した色を削除してください

$(".skins, .layout").change(applyClasses); 
$(".colors span").click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
    applyClasses(); 
}); 

function applyClasses() { 
    var classes = [ 
     $(".skins").val(), 
     $(".layout").val(), 
     $(".colors span.active").data('color') 
    ]; 

    $('body').removeClass().addClass(classes.join(' ')); 
} 

applyClasses(); // on load 

Updated fiddle

+0

最初の方法は私のためにうまくいきます。私のプロジェクトを保存していただきありがとうございます:)これは私の新しいデモです:[link](https://jsfiddle.net/uikithemes/p18cqa5s/18 /) –

+0

喜んでお手伝いします。私はあなたがはるかに拡張可能なので、2番目の方法を使用することをお勧めします。 –

1

がにremoveClass()メソッドを使用します既存のクラスを削除し、addClass()を呼び出して新しいクラスを追加します。

// Theme Colors Switch 
$(".colors span").each(function() { 
    var data_color = $(this).attr("data-color"); 
    $(this).click(function() { 
     $("body").removeClass().addClass(data_color);    
    }); 
}); 

removeClass()メソッドを使用すると、すべてのクラスが削除されます。

より簡易版

$(".colors span").click(function(e){ 
    e.preventDefault(); 
    $("body").removeClass().addClass($(this).attr("data-color")); 
}) 

+0

'body'は' select'要素の 'change'イベントからクラスを追加することに注意してください。 'removeClass'を使うと、それらのクラスとカラークラスを削除します。 –

+0

ありがとうございました:) –

2

;:これを試してみてくださいまた、同じ色の見本が連続して

// Theme Colors Switch 
$(".colors span").each(function() { 
    var data_color = $(this).attr("data-color"); 
    $(this).click(function() { 
     $("body").removeClass(document.body.className.split(" ").slice(-1)[0]) 
     .toggleClass(data_color, true); 
    }); 
}); 

jsfiddle https://jsfiddle.net/p18cqa5s/3/

+0

本当にありがとうございました:) –

1

をクリックした場合classを取り除く防ぐため.toggleClass()trueを追加すると、アレイへのすべてのdata_colorを追加して、色のクリックの上にある身体からすべてのクラスを削除します配列。その後、次のような新しいクラスを追加します。フィドル更新

var data_color= []; 
// Theme Colors Switch 
$(".colors span").each(function() { 
    data_color.push($(this).attr("data-color")); 
    $(this).click(function() { 
     $("body").removeClass(data_color.join(' ')).addClass($(this).attr("data-color")); 
    }); 
}); 

https://jsfiddle.net/p18cqa5s/5/

+0

ありがとうございました。 –

関連する問題