JQuery Переключить текст?
Кто-нибудь знает, как переключить текст html-текста привязанного тега с помощью jQuery. Я хочу привязку, которая при нажатии на текст чередуется между "Показывать фон" и "Показать текст", а также затухает и вынимает другой 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();
});
});
Спасибо заранее.
Ответы
Ответ 1
Извините, проблема в том, что я! это было не синхронизировано, но это было потому, что у меня текст HTML неправильный. При первом нажатии я хочу, чтобы div исчез, а текст - "Показать текст".
В следующий раз я буду проверять более подробно, прежде чем спросить!
Мой код:
$(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();
});
});
Еще раз спасибо за помощь!
Ответ 2
$(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 ссылки и переключая их при каждом нажатии.
Ответ 3
Самый красивый ответ:
Расширьте 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');
Я использовал логику (x == b? a: b) в том случае, если исходный текст HTML немного отличается (дополнительное пространство, период и т.д.), поэтому вы никогда не получите дубликат отображение предполагаемого начального значения
(Также почему я намеренно оставил пробелы в примере HTML;-)
Еще одна возможность использования HTML-переключателя, представленная моим вниманием, Meules [ниже]:
$.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>.')
);
(или что-то вроде этого)
Ответ 4
Улучшение и упрощение ответа @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');
Ответ 5
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/
Ответ 6
Почему бы вам просто не складывать их:
$("#clickedItem").click(function(){
$("#animatedItem").animate( // );
}).toggle( // <--- you just stack the toggle function here ...
function(){
$(this).text( // );
},
function(){
$(this).text( // );
});
Ответ 7
var el = $('#someSelector');
el.text(el.text() == 'view more' ? 'view less' : 'view more');
Ответ 8
Используйте 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>
Fiddle: http://jsfiddle.net/DmppM/
Ответ 9
Я написал собственное небольшое расширение для toggleText. Это может пригодиться.
Fiddle: 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 -------
Ответ 10
Изменив свой ответ из вашего другого вопроса, я бы сделал следующее:
$(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);
});
});
Ответ 11
Используйте этот
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>
Ответ 12
В большинстве случаев у вас будет более сложное поведение, связанное с вашим событием click. Например, ссылка, которая переключает видимость какого-либо элемента, и в этом случае вы захотите поменять текст ссылки с "Показать детали" на "Скрыть детали" в дополнение к другому поведению. В этом случае это было бы предпочтительным решением:
$.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");
});
Ответ 13
$.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");
Ответ 14
<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);
});
})();
Ответ 15
Возможно, я упрощаю проблему, но это то, что я использую.
$.fn.extend({
toggleText: function(a, b) {
$.trim(this.html()) == a ? this.html(b) : this.html(a);
}
});
Ответ 16
Улучшена функция 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!");
Ответ 17
это не очень чистый и умный способ, но его очень легко понять и использовать время - его как нечетное и четное - логическое:
var moreOrLess = 2;
$('.Btn').on('click',function(){
if(moreOrLess % 2 == 0){
$(this).text('text1');
moreOrLess ++ ;
}else{
$(this).text('more');
moreOrLess ++ ;
}
});
Ответ 18
Почему бы не следить за состоянием класса без правил 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");
}
});
});
Ответ 19
var jPlayPause = $("#play-pause");
jPlayPause.text(jPlayPause.hasClass("playing") ? "play" : "pause");
jPlayPause.toggleClass("playing");
Это мысль, использующая метод jQuery toggleClass().
Предположим, что у вас есть элемент с id = "play-pause", и вы хотите переключать текст между "play" и "pause".
Ответ 20
Вы также можете переключить текст, используя toggleClass() в качестве мысли.
.myclass::after {
content: 'more';
}
.myclass.opened::after {
content: 'less';
}
А потом использовать
$(myobject).toggleClass('opened');