2010-02-08 78 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