4

で使用Bootstrap 3していJqueryます。span タグにアイコンを含むボタンがあります。 (bootstrap のグリピコンを使用)

<button id="swapArchived" class="btn btn-default btn-sm showArchived">
       <span class="glyphicon glyphicon-road"></span> Show Archived
</button>

クリックしたときにアイコンとテキストを変更したい。以外に良い方法はありますか?

$('#swapArchived').on('click', function () {
    var $el = $(this);
    if($el.hasClass('showArchived'))
    {
      $el.html('<span class="glyphicon glyphicon-fire"></span> Show Incomplete');
    }
    else
    {      
      $el.html('<span class="glyphicon glyphicon-road"></span> Show Archived');
    }
      $el.toggleClass('showArchived');
  });

ボタンのテキストとスパン クラスを同時に切り替えることができるかどうかに興味がありました。クリックするたびにスパンを書くことを避けようとしています。

ありがとう-

4

3 に答える 3

14

試す

jQuery(function ($) {

    $('#swapArchived').on('click', function () {
        var $el = $(this),
            textNode = this.lastChild;
        $el.find('span').toggleClass('glyphicon-fire glyphicon-road');
        textNode.nodeValue = 'Show ' + ($el.hasClass('showArchieved') ? 'Incomplete' : 'Archived')
        $el.toggleClass('showArchieved');
    });
});

デモ:フィドル

于 2013-11-11T04:08:27.603 に答える
0

最初にテキストを別の要素に入れて、簡単に置き換えられるようにします。

<button id="swapArchived" class="btn btn-default btn-sm showArchived">
    <span class="glyphicon glyphicon-road"></span>
    <span>Show Archived</span>
</button>

次に、次のようなものが機能するはずです。

$('#footer-top').click(function(){
    var el   = $(this),
        next = el.next(),
        txt  = "Show Incomplete";

    if (/Inc/.test(next.text()))
        var txt = "Show Archived";

    $(this).toggleClass("glyphicon-road")
           .toggleClass("glyphicon-fire");
    next.text(txt);
})

または、短くても読みにくいかもしれません:

$('#swapArchived').click(function(){
    $(this).toggleClass("glyphicon-road")
           .toggleClass("glyphicon-fire")
           .next().text("Show " + 
               /Inc/.test( $(this).text()) ? "Archived" : "Incomplete");
}

驚くほど簡潔ではありませんが、悪くはありません。

于 2013-11-11T04:38:27.100 に答える
0

最初にテキストを識別可能なものでラップします。

<button id="swapArchived" class="btn btn-default btn-sm showArchived">
    <span class="glyphicon glyphicon-road"></span>
    <span class="text">Show Archived</span>
</button>

次に、必要な属性/テキストを変更するだけです

$('#swapArchived').on('click', function(e) {
    var btn = $(this),
        icon = btn.find('.glyphicon'),
        text = btn.find('.text'),
        toggleClass = 'showArchived';

    if (btn.hasClass(toggleClass)) {
        icon.removeClass('glyphicon-road').addClass('glyphicon-fire');
        text.text('Show Incomplete');
    } else {
        icon.removeClass('glyphicon-fire').addClass('glyphicon-road');
        text.text('Show Archived');
    }
    btn.toggleClass(toggleClass);
});
于 2013-11-11T04:07:45.980 に答える