在jQuery中的两个类之间切换

时间:2009-10-29 15:29:20

标签: jquery class toggle

我正在尝试修改jQuery UI portlets的图标。我想切换它们,而不是加减少和减去扩展。

我只是取得了有限的成功,第一次点击减去它翻转加号,但加号从未翻转到减号。对此有任何帮助将非常感激。

以下是HTML示例:

<script src="scripts/jquery-1.3.2.js" type="text/javascript" ></script>
<script src="scripts/ui/ui.core.js" type="text/javascript"></script>
<script src="scripts/ui/ui.sortable.js" type="text/javascript"></script>

<div class="column">
    <div class="portlet">
        <div class="portlet-header">Links</div>
        <div class="portlet-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit</div>
    </div>
</div>

以下是我为jQuery提出的建议:

<script type="text/javascript">
    $(function() {
        $(".column").sortable({
            connectWith: '.column'
        });

        $(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
        .find(".portlet-header")
            .addClass("ui-widget-header ui-corner-all")
            .prepend('<span class="ui-icon ui-icon-minusthick"></span>')
            .prepend('<span class="ui-icon ui-icon-closethick"></span>')
            .end()
        .find(".portlet-content");

        $(".portlet-header .ui-icon-minusthick").click(function() {
            $(this).removeClass("ui-icon-minusthick");
            $(this).addClass("ui-icon-plusthick");
            $(this).parents(".portlet:first").find(".portlet-content").toggle();
        });

        $(".portlet-header .ui-icon-plusthick").click(function() {
            $(this).removeClass("ui-icon-plusthick");
            $(this).addClass("ui-icon-minusthick");
            $(this).parents(".portlet:first").find(".portlet-content").toggle();
        });

        $(".portlet-header .ui-icon-closethick").click(function() {
            $(this).parents(".portlet:first").toggle();
        });

        $(".column").disableSelection();
    });
</script>

<小时/> 编辑:这是来自jQuery UI演示网站的原始javascript:

<script type="text/javascript">
$(function() {
    $(".column").sortable({
        connectWith: '.column'
    });

    $(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
        .find(".portlet-header")
            .addClass("ui-widget-header ui-corner-all")
            .prepend('<span class="ui-icon ui-icon-plusthick"></span>')
            .end()
        .find(".portlet-content");

    $(".portlet-header .ui-icon").click(function() {
        $(this).toggleClass("ui-icon-minusthick");
        $(this).parents(".portlet:first").find(".portlet-content").toggle();
    });

    $(".column").disableSelection();
});
</script>

我不确定他们如何才能正确切换加号和减号。

5 个答案:

答案 0 :(得分:119)

怎么样

$(YOUR_ELEMENT).live("EVENT_NAME", function() {
    $(".portlet-header").toggleClass("ui-icon-plus").toggleClass("ui-icon-minus");
});

更短

$(YOUR_ELEMENT).live("EVENT_NAME", function() {
    $(".portlet-header").toggleClass("ui-icon-plus ui-icon-minus");
});

修改

从jQuery 1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序。 旧版jQuery的用户应优先使用.delegate() {。{1}}。


jQuery API reference

答案 1 :(得分:47)

您可以尝试以下代码

$(this).toggleClass('ui-icon-plusthick ui-icon-minusthick');

答案 2 :(得分:6)

这可能是因为绑定这些函数时没有$(“。portlet-header .ui-icon-plusthick”)的结果。它找不到它。您可以将此绑定添加到$(“。portlet-header .ui-icon-minusthick”)。单击(function(){...添加“ui-icon-plusthick”类之后。

编辑: 替代解决方案可能是:

$(".portlet-header .ui-icon-minusthick").toggle(function() {
        $(this).removeClass("ui-icon-minusthick");
        $(this).addClass("ui-icon-plusthick");
        $(this).parents(".portlet:first").find(".portlet-content").toggle();
    }, function() {
        $(this).removeClass("ui-icon-plusthick");
        $(this).addClass("ui-icon-minusthick");
        $(this).parents(".portlet:first").find(".portlet-content").toggle();
    });

因此,首先点击将是第一个功能,第二个点击将是第二个功能。

答案 3 :(得分:0)

我编写了这个jQuery函数,而不是一个插件,来遍历任意数量的类。两个动作就像一个切换。只需将您的类名称CSV放在元素的数据类中。然后使用$(selector)。cycleClass()

循环它

www.PluginExamples.com/draggable处查看正在使用的选项 draggable-axis

(function($){
    $.fn.cycleClass = function(){
        if( !$(this).data("aClasses") ){
            var classes = $(this).attr("data-classes").split(",");
            $(this).data("aClasses", classes);
            $(this).data("classes", classes.join(" "));
            $(this).data("class", classes.length);
        }
        $(this).data("class",($(this).data("class")+1) % $(this).data("aClasses").length);
        $(this).removeClass($(this).data("classes"))
            .addClass( $(this).data("aClasses")[$(this).data("class")] );
        return $(this);
    }
});

答案 4 :(得分:-2)

为什么不修改 ui-icon-plusthick CSS类来显示负图像而不是加号图像?