83

jQueryを使用してアンカータグのHTMLテキストを切り替える方法は?Show Backgroundクリックするとテキストが&の間で交互に表示Show Textされ、別のdivがフェードインおよびフェードアウトするアンカーが必要です。これは私の最良の推測でした:

$(function() {
    $("#show-background").click(function () {
        $("#content-area").animate({opacity: 'toggle'}, 'slow'); 
    });

    $("#show-background").toggle(function (){
        $(this).text("Show Background")
        .stop();
    }, function(){
        $(this).text("Show Text")
        .stop();
    });
});
4

20 に答える 20

130
$(function() {
    $("#show-background").click(function () {
        $("#content-area").animate({opacity: 'toggle'}, 'slow'); 
    });

    var text = $('#show-background').text();
    $('#show-background').text(
        text == "Show Background" ? "Show Text" : "Show Background");
});

トグルは要素を非表示または表示します。2つのリンクを設定し、どちらかがクリックされたときにそれらを切り替えることで、トグルを使用して同じ効果を得ることができます。

于 2010-01-28T15:14:20.093 に答える
68

最も美しい答えは... この関数でjQueryを拡張する...

$.fn.extend({
    toggleText: function(a, b){
        return this.text(this.text() == b ? a : b);
    }
});

HTML:

<button class="example"> Initial </button>

使用する:

$(".example").toggleText('Initial', 'Secondary');

最初のHTMLテキストがわずかに異なる場合(余分なスペース、ピリオドなど)にロジック(x == b?a:b)を使用したため、意図した初期値

(また、HTMLの例で意図的にスペースを残した理由;-)

Meules[下記]によって私の注意を引いたHTMLトグル使用の別の可能性は次のとおりです。

$.fn.extend({
        toggleHtml: function(a, b){
            return this.html(this.html() == b ? a : b);
        }
    });

HTML:

<div>John Doe was an unknown.<button id='readmore_john_doe'> Read More... </button></div>

使用する:

$("readmore_john_doe").click($.toggleHtml(
    'Read More...', 
    'Until they found his real name was <strong>Doe John</strong>.')
);

(またはこのようなもの)

于 2016-09-16T07:28:26.023 に答える
37

申し訳ありませんが、問題は私です!同期がとれていませんでしたが、これはHTMLテキストの方向が間違っているためです。最初のクリックで、divをフェードアウトさせ、テキストに「ShowText」と表示させます。

次回は質問する前にもっと徹底的にチェックします!

私のコードは次のとおりです。

$(function() {
  $("#show-background").toggle(function (){
    $("#content-area").animate({opacity: '0'}, 'slow')
    $("#show-background").text("Show Text")
      .stop();
  }, function(){
    $("#content-area").animate({opacity: '1'}, 'slow')
    $("#show-background").text("Show Background")
      .stop();
  });
});

助けてくれてありがとう!

于 2010-01-28T15:23:51.117 に答える
26

@Nateの答えの改善と簡素化:

jQuery.fn.extend({
    toggleText: function (a, b){
        var that = this;
            if (that.text() != a && that.text() != b){
                that.text(a);
            }
            else
            if (that.text() == a){
                that.text(b);
            }
            else
            if (that.text() == b){
                that.text(a);
            }
        return this;
    }
});

使用:

$("#YourElementId").toggleText('After', 'Before');
于 2014-10-03T16:43:43.793 に答える
16
jQuery.fn.extend({
        toggleText: function (a, b){
            var isClicked = false;
            var that = this;
            this.click(function (){
                if (isClicked) { that.text(a); isClicked = false; }
                else { that.text(b); isClicked = true; }
            });
            return this;
        }
    });

$('#someElement').toggleText("hello", "goodbye");

テキストの切り替えのみを行うJQueryの拡張機能。

JSFiddle: http: //jsfiddle.net/NKuhV/

于 2013-07-03T15:31:28.260 に答える
14
var el  = $('#someSelector');    
el.text(el.text() == 'view more' ? 'view less' : 'view more');
于 2017-01-15T16:03:14.747 に答える
7

積み重ねてみませんか::

$("#clickedItem").click(function(){
  $("#animatedItem").animate( // );
}).toggle( // <--- you just stack the toggle function here ...
function(){
  $(this).text( // );
},
function(){
  $(this).text( // );
});
于 2011-06-20T19:36:19.537 に答える
6

html()を使用してHTMLコンテンツを切り替えます。fflyer05のコードに似ています:

$.fn.extend({
    toggleText:function(a,b){
        if(this.html()==a){this.html(b)}
        else{this.html(a)}
    }
});

使用法:

<a href="#" onclick='$(this).toggleText("<strong>I got toggled!</strong>","<u>Toggle me again!</u>")'><i>Toggle me!</i></a>

フィドル: http: //jsfiddle.net/DmppM/

于 2014-02-12T09:46:18.230 に答える
4

私はtoggleText用に独自の小さな拡張機能を作成しました。重宝するかもしれません。

フィドル:https ://jsfiddle.net/b5u14L5o/

jQuery拡張機能:

jQuery.fn.extend({
    toggleText: function(stateOne, stateTwo) {
        return this.each(function() {
            stateTwo = stateTwo || '';
            $(this).text() !== stateTwo && stateOne ? $(this).text(stateTwo)
                                                    : $(this).text(stateOne);
        });  
    }
});

使用法:

...
<button>Unknown</button>
...
//------- BEGIN e.g. 1 -------
//Initial button text is: 'Unknown'
$('button').on('click', function() {
    $(this).toggleText('Show', 'Hide'); // Hide, Show, Hide ... and so on.
});
//------- END e.g. 1 -------

//------- BEGIN e.g. 2 -------
//Initial button text is: 'Unknown'
$('button').on('click', function() {
    $(this).toggleText('Unknown', 'Hide'); // Hide, Unknown, Hide ...
});
//------- END e.g. 2 -------

//------- BEGIN e.g. 3 -------
//Initial button text is: 'Unknown'
$('button').on('click', function() {
    $(this).toggleText(); // Unknown, Unknown, Unknown ...
});
//------- END e.g.3 -------

//------- BEGIN e.g.4 -------
//Initial button text is: 'Unknown'
$('button').on('click', function() {
    $(this).toggleText('Show'); // '', Show, '' ...
});
//------- END e.g.4 -------
于 2015-05-05T20:25:26.993 に答える
3

これを使って

jQuery.fn.toggleText = function() {
    var altText = this.data("alt-text");
    if (altText) {
        this.data("alt-text", this.html());
        this.html(altText);
    }
};

これがあなたがそれを訴える方法です

 
   jQuery.fn.toggleText = function() {
    	var altText = this.data("alt-text");

    	if (altText) {
    		this.data("alt-text", this.html());
    		this.html(altText);
    	}
    };

    $('[data-toggle="offcanvas"]').click(function ()  {

    	$(this).toggleText();
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button data-toggle="offcanvas" data-alt-text="Close">Open</button>

htmlが適切にエンコードされていれば、htmlを使用することもできます。

于 2015-01-31T09:07:24.170 に答える
2

あなたの他の質問からの私の答えを修正して、私はこれをします:

$(function() {
 $("#show-background").click(function () {
  var c = $("#content-area");
  var o = (c.css('opacity') == 0) ? 1 : 0;
  var t = (o==1) ? 'Show Background' : 'Show Text';
  c.animate({opacity: o}, 'slow');
  $(this).text(t);
 });
});
于 2010-01-28T15:17:06.330 に答える
1

ほとんどの場合、クリックイベントに関連するより複雑な動作があります。たとえば、一部の要素の表示を切り替えるリンク。この場合、他の動作に加えて、リンクテキストを「詳細の表示」から「詳細の非表示」に交換する必要があります。その場合、これが推奨される解決策になります。

$.fn.extend({
  toggleText: function (a, b){
    if (this.text() == a){ this.text(b); }
    else { this.text(a) }
  }
);

あなたはそれをこのように使うことができます:

$(document).on('click', '.toggle-details', function(e){
  e.preventDefault();
  //other things happening
  $(this).toggleText("Show Details", "Hide Details");
});
于 2013-09-20T18:32:20.190 に答える
1
$.fn.toggleText = function(a){
    var ab = a.split(/\s+/);
    return this.each(function(){
        this._txIdx = this._txIdx!=undefined ? ++this._txIdx : 0;
        this._txIdx = this._txIdx<ab.length ? this._txIdx : 0; 
        $(this).text(ab[this._txIdx]);
    }); 
}; 
$('div').toggleText("Hello Word");
于 2013-11-26T05:00:19.623 に答える
1
<h2 id="changeText" class="mainText"> Main Text </h2>

(function() {
    var mainText = $('.mainText').text(),
        altText = 'Alt Text';

    $('#changeText').on('click', function(){
        $(this).toggleClass('altText');
        $('.mainText').text(mainText);
        $('.altText').text(altText);
    });

})();
于 2014-07-23T18:01:13.810 に答える
1

おそらく私は問題を単純化しすぎていますが、これが私が使用しているものです。

$.fn.extend({
    toggleText: function(a, b) {
        $.trim(this.html()) == a ? this.html(b) : this.html(a);
    }
});
于 2015-08-19T14:35:41.677 に答える
1

Nate-Wilkinsの改善された機能:

jQuery.fn.extend({
    toggleText: function (a, b) {
        var toggle = false, that = this;
        this.on('click', function () {
            that.text((toggle = !toggle) ? b : a);
        });
        return this;
    }
});

html:

<button class="button-toggle-text">Hello World</button>

使用:

$('.button-toggle-text').toggleText("Hello World", "Bye!");
于 2016-04-27T10:16:58.727 に答える
1

また、toggleClass()を思考として使用してtoggleTextを実行することもできます。

.myclass::after {
 content: 'more';
}
.myclass.opened::after {
 content: 'less';
}

そして、

$(myobject).toggleClass('opened');
于 2019-02-03T11:42:44.937 に答える
0

これは非常にクリーンでスマートな方法ではありませんが、非常に簡単に理解して使用できる場合があります。

  var moreOrLess = 2;

  $('.Btn').on('click',function(){

     if(moreOrLess % 2 == 0){
        $(this).text('text1');
        moreOrLess ++ ;
     }else{
        $(this).text('more'); 
        moreOrLess ++ ;
     }

});
于 2014-01-16T17:46:55.617 に答える
0

クリック可能なアンカー自体にCSSルールがないクラスの状態を追跡してみませんか

$(function() {
    $("#show-background").click(function () {
        $("#content-area").animate({opacity: 'toggle'}, 'slow');
        $("#show-background").toggleClass("clicked");
        if ( $("#show-background").hasClass("clicked") ) {
            $(this).text("Show Text");
        }
        else {
            $(this).text("Show Background");
        }
    });
});
于 2016-01-04T15:09:59.380 に答える
0
var jPlayPause = $("#play-pause");
jPlayPause.text(jPlayPause.hasClass("playing") ? "play" : "pause");
jPlayPause.toggleClass("playing");

これは、jQueryのtoggleClass()メソッドを使用した考え方です。

id = "play-pause"の要素があり、テキストを「play」と「pause」の間で切り替えたいとします。

于 2016-11-11T20:24:16.530 に答える