javascript - 以编程方式更改类名

标签 javascript jquery dom

我正在尝试增加/减少元素的类名中包含的数字。

让我们考虑这段代码:

<a href="#" class="increase">Increase</a>
<a href="#" class="decrease">Decrease</a>
<div id="my_div" class="large-12 columns">Div content</div>

我想实现这样的目标:

$('a.decrease').click(function(e){
    e.preventDefault();

    $('#my_div').decreaseClass('class^=large-'); 
    //decrease the number at the end of the class(es)
    //starting with the name "large-"
    //in this case large-12 would go to large-11
});

知道怎么做吗?

最佳答案

更新的答案

我改进了 jQuery 插件以改进其功能。我们有一个 .alterClass() 方法来增加/减少类的数量(通过 step 配置):

;(function ($) {
    $.fn.alterClass = function (cls, opt) {
        opt = opt || {};
        var conf = $.extend({}, {
            'min': 1,  // min number of the class
            'max': 12, // max number of the class
            'step': 1  // increment/decrement step
        }, opt);

        return this.each(function () {
            var oldClass = $.grep(this.className.split(" "), function (v, i) {
                return v.indexOf(cls) === 0;
            }).join(),
                oldNum = Number(oldClass.split('-')[1]),
                newClass;

            oldNum += conf.step;

            if (conf.step > 0) { // increase mode
                newClass = cls + (oldNum <= conf.max ? oldNum : conf.max);
            } else { // decrease mode
                newClass = cls + (oldNum >= conf.min ? oldNum : conf.min);
            }

            if (! $(this).hasClass(newClass)) {
                $(this).removeClass(oldClass).addClass(newClass);
            }
        });
    };
}(jQuery));

您可以设置min 和/或max 数字以及step:

$('.increase').click(function(e) {
    e.preventDefault();
    $('#my_div').alterClass('large-', {'step': 1});
});

$('.decrease').click(function(e) {
    e.preventDefault();
    $('#my_div').alterClass('large-', {'step': -1});
});

这是 UPDATED DEMO .

原始答案

这是我创建 .decreaseClass() 方法的尝试:

;(function($) {
    $.fn.decreaseClass = function(cls) {
        return this.each(function() {
            var oldClass = $.grep(this.className.split(" "), function(v, i){
                return v.indexOf(cls) === 0;
            }).join(),
                oldNum = oldClass.split('-')[1];
            $(this).removeClass(oldClass).addClass(cls+--oldNum);
        });
    };  
}(jQuery));

您可以按如下方式使用上述插件:

$('.decrease').click(function(e) {
    e.preventDefault();
    $('#my_div').decreaseClass('large-');
});

WORKING DEMO .

关于javascript - 以编程方式更改类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689656/

相关文章:

javascript - React 缓存渲染组件

Javascript - 将参数传递给调用另一个函数的函数

javascript - jQuery 更改 ID 不会运行函数

javascript - Jquery 或 CSS : Set static, div 的高度不可更改?

jquery - jquery bxslider 插件中的自定义分页器

android - 使用 android 中的 DOM 解析器解析存储在内部存储器中的 XML 文件。

javascript - JavaScript 'get middle letter' 代码 war 挑战的三元运算符函数

php - 无法根据来自 php 的 json id 在 JavaScript 中设置变量

javascript - 解决 javascript/dom 渲染问题的更有效方法?

Javascript 最佳实践——在 DOM 中隐藏元素或生成 DOM 元素