jQuery 토글 텍스트?


79

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();
    });
});

게시 한 코드에 어떤 문제가 있습니까? 문제에 대한 해결책을 찾기 전에 문제를 아는 것이 도움이됩니다.
Yacoby

이 코드가 원하는 작업을 수행하지 않습니까?
Josh Wright

답변:


124
$(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");
});

토글은 요소를 숨기거나 표시합니다. 두 개의 링크가 있고 둘 중 하나를 클릭 할 때 토글하여 토글을 사용하여 동일한 효과를 얻을 수 있습니다.


<a>태그 텍스트 (예 : "Show Text"및 "Show Background")를 jQuery 코드로 분리하지 않고 앵커 HTML과 함께 유지할 수있는 유사한 내용은 stackoverflow.com/a/28500651/245602
George를

58

가장 아름다운 대답은 ... 이 함수로 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>.')
);

(또는 이와 비슷한 것)


2
훌륭한 솔루션! 당신은 변경할 수 있습니다 texthtmla가 더 읽을 때 / :) 적은 기능을 읽을이 기능을 사용하고 클래스 토글
Meules

물론 이죠! 웹 앱 및 검색 엔진에서 텍스트를 찾을 필요가없는 경우에 이것은 훌륭한 솔루션입니다. "자세히 알아보기"섹션의 콘텐츠가 콘텐츠로 인해 검색 엔진에서 웹 사이트 순위를 정하는 데 실제로 도움이 될 수 있다면 이것이 최선의 선택이 아닐 수 있습니다.
JxAxMxIxN

37

문제는 나야 미안해! 동기화되지 않았지만 이것은 HTML 텍스트가 잘못된 방식이기 때문입니다. 첫 번째 클릭에서 div는 페이드 아웃되고 텍스트는 "Show Text"라고 표시됩니다.

내가 묻기 전에 다음에 더 철저히 확인하겠습니다!

내 코드는 다음과 같습니다.

$(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();
  });
});

도와 주셔서 다시 한 번 감사드립니다!


17
독자 여러분, 조심하세요! 이 toggle기능 오버로드는 jQuery 1.9에서 제거되었으므로이 기능복원 하지 않으면 사용할 수 없습니다 . 그러나 아마도 다른 답변으로 진행하는 것이 더 좋습니다.
사용자

25

@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');

1
@webkitfanz 는 that.text (a) 와 같은 장소의 텍스트html 로 간단하게 변경합니다. 참조-> $ .fn.extend ({toggleText : function (a, b) {return this.html (this.html () == b? a : b);}});
Vishwa

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/


1
이것은 구현하기 매우 쉬웠습니다. 처음에는 클릭 동작도 slideToggle을 실행하기 때문에 트릭을 수행할지 확신 할 수 없었지만 문제없이 트릭을 수행했습니다. "텍스트 표시"/ "텍스트 숨기기"용도에 적합합니다. 감사!
acarito

12
var el  = $('#someSelector');    
el.text(el.text() == 'view more' ? 'view less' : 'view more');

공장. Best answer imo, 2 줄로했습니다.

7

그냥 쌓아 두는 게 어때요 ::

$("#clickedItem").click(function(){
  $("#animatedItem").animate( // );
}).toggle( // <--- you just stack the toggle function here ...
function(){
  $(this).text( // );
},
function(){
  $(this).text( // );
});

5
이 토글 구현은 Jquery v1.9에서 제거되었으며 이제 가시성을 토글합니다. 참조 여기
solipsicle

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/


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 -------

3

이것을 사용하십시오

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

고소하는 방법은 다음과 같습니다.

html이 제대로 인코딩 된 경우 html을 사용할 수도 있습니다.


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);
 });
});

와우, 이것이 어떻게 작동하는지 약간의 작업을 할 것이지만 도움을 주셔서 감사합니다.
mtwallet

BTW 이제 jQuery 1.4에 연결하고 필요한 부분 만 격리하는 도구 라이브러리를 세분화했습니다. 충돌은 라이브러리의 Flash Embed 부분과 관련된 것이라고 생각합니다.
mtwallet

경우 당신이 알고하지 않았 ot삼항 연산자 (에 정의되어 en.wikipedia.org/wiki/Ternary_operation ) ... 그리고 죄송합니다 내가 추가하는 것을 잊었다 var앞에 - 나는 지금을 편집합니다
Mottie

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");
});

니스는 toggleText 정의는 '}'그리워

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");

이것은 jquery에 추가된다는 의미입니까?
Joseph Dailey 2014

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);
    });

})();

1

아마도 나는 문제를 지나치게 단순화하고 있지만 이것이 내가 사용하는 것입니다.

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

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!");

1

또한 toggleClass ()를 생각으로 사용하여 toggleText를 사용할 수 있습니다.

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

그런 다음

$(myobject).toggleClass('opened');

0

이것은 매우 깨끗하고 현명한 방법은 아니지만 이해하고 사용하기가 매우 쉽습니다.

  var moreOrLess = 2;

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

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

});

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");
        }
    });
});

0
var jPlayPause = $("#play-pause");
jPlayPause.text(jPlayPause.hasClass("playing") ? "play" : "pause");
jPlayPause.toggleClass("playing");

이것은 jQuery의 toggleClass () 메소드를 사용하는 생각입니다.

id = "play-pause"요소가 있고 "play"와 "pause"사이에서 텍스트를 전환하려고한다고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.