javascript - jQuery toggleClass 有效,在点击时添加 .text() 替换会破坏它

标签 javascript jquery html css alloy-ui

全部-

我似乎有一个有趣的问题来解决单击按钮不仅显示/隐藏其下方的 div(因此按钮上的 ID 值),而且还必须更改按钮内的文本以及从 icon-collapse 到 icon-collapse-top 的合金图标(在此处查看更多信息:http://nickpiesco.github.io/alloy-ui-font-awesome-cheatsheet/)

HTML

<div class="button-holder">
    <button class="btn btn-primary toggle-hidden" id="1">Expand
        Options <span class="icon-collapse"></span></button>
</div>

JS

$(".hidden-group").hide();

$(".toggle-hidden").click(function(e) {
    event.preventDefault();
    var text = $(this).text();

    $(this).text(
        text == "Minimize Options" ? "Expand Options" : "Minimize Options");

    $(this).find("span").toggleClass( "icon-collapse" );
    $(this).find("span").toggleClass( "icon-collapse-top" );

    $("#hidden-" + e.target.id).toggle(250);

});

问题是,如果我注释掉 .text() 替换代码(有效),.toggleClass() 代码将再次开始工作。使用 .text() 代码,在 Chrome 开发人员工具中进行调查时,文本替换将导致标签消失。切换几次后,它看起来像这样,不包括跨度:

<button class="btn btn-primary toggle-hidden" id="1">Minimize Options</button>

我试过看看我是否可以将跨度添加到文本替换代码中,但那样你只会在按钮中获得实际文本。

有没有办法防止 .text() 替换也删除它后面的跨度(这会导致图像位于此按钮的末尾)?也欢迎提出其他想法或建议。

最佳答案

您可以在替换文本之前保留一份跨度的副本,然后您可以在后面追加它。有点像

$(".toggle-hidden").click(function(e) {
    e.preventDefault();
    var text = $(this).text();
    var $span = $(this).find("span");
    $(this).text(
        text == "Minimize Options" ? "Expand Options" : "Minimize Options");

    $(this).append($span);
    $(this).find("span").toggleClass("icon-collapse");
    $(this).find("span").toggleClass("icon-collapse-top");

    $("#hidden-" + e.target.id).toggle(250);

});

关于javascript - jQuery toggleClass 有效,在点击时添加 .text() 替换会破坏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111233/

相关文章:

javascript - 居中的粘性菜单?

javascript - jquery 内联图像淡入淡出以及 <span> 中的标题

javascript - 模态转换显示问题

javascript - 如何避免数组中的项目在另一个集群中重复?

javascript - jquery中如何调用$(function)

javascript - jQuery 滚动功能不触发(滚动太快)

javascript - 为什么需要先显示图片才能让 jquery 图像放大镜工作?

javascript - jquery 可排序 : sorted item triggers reordering

javascript - 单击标题而不仅仅是标题时打开 Accordion 面板

javascript - 获取唯一移动网络客户的数量