2010-02-08 86 views
0

我有一個選擇框的值: 蘋果80 蘋果100 蘋果120 蘋果300操縱類與jQuery

我:<body class="fruit apple-120 otherclass anotherclass">

我想操縱體類將「apple-120」替換爲選擇框中的任何選定值,同時保持水果,其他類,其他類,類別不變。

到目前爲止,我創造了這個:

$.fn.classSwitcher = function(options) { 
    var baseOptions = { 
    classTarget: 'body', 
    oldClass: 'apple-120' 
    }; 

    var options = $.extend(baseOptions, options); 

    return this.each(function() { 
     $(this).click(function() { 
      var t = $(this); 
      var optionVal = t.val(); 
      $(options.classTarget).removeClass(options.oldClass).addClass(optionVal); 
     }); 
    }); 
}; 

然後,我有:

$('#sel option').classSwitcher(); 

這取代了階級,但在選擇框的下一個點擊,更多選擇選項值將作爲新課程,這不是我想要的。

我只想用新值替換「apple-120」,而不是添加更多。其他任何點擊都會替換相同的目標類。

另外,我也想抓住所有選擇框的值,以保持它們作爲縮小這些類的選擇的條件。說,如果一個類匹配選擇框中的任何值,請執行一些操作。

任何提示將非常感激。謝謝。

+0

你更新以任何方式在'options.oldClass'中的值? – 2010-02-08 10:38:15

+0

options.oldClass應該被替換爲選擇框中的任何值。最大的答案做到了。只等待抓取選擇值部分。謝謝 – swan 2010-02-08 11:12:37

回答

3

問題是你沒有更新options.oldClass所以它總是試圖刪除原來的apple-120。你應該將其設置爲當您更新要被分配類:

... 
    $(this).click(function() { 
     var t = $(this); 
     var optionVal = t.val(); 
     $(options.classTarget).removeClass(options.oldClass).addClass(optionVal); 
     options.oldClass = optionVal; 
    }); 
... 
+0

嗨,最大。你解決了我的問題。我誤認爲是Lachlan。答案也是跳來跳去:)任何暗示抓住所有選擇框的值?謝謝 – swan 2010-02-08 11:09:52

+0

謝謝Max,標記爲固定。愛這個社區。 – swan 2010-02-08 11:34:24

+0

我不確定您是通過抓取選擇框值來表示您的意思。你可以簡單地通過'$('#sel option')。toArray()'獲得所有'

0

如果你要記得點擊以前調用值,你可以在值存儲與data()

$(this).click(function() { 
    var val = $(this).val(); 
    if (val != $(this).data('previous')) { 
     $(this).data('previous', val); 
     // ... 
    } 
}); 
+0

這個工作到目前爲止,只是錯過了關閉)。我會用其他答案更新我的發現。謝謝。 – swan 2010-02-08 10:56:46

+0

糟糕,選錯了。你的代碼實際上破了任何提示?我與Max的測試一起進行測試,並將它誤認爲是你的,並像往常一樣緩存。 – swan 2010-02-08 11:07:31