有没有人知道如何使用jQuery切换文本锚标记的html文本。我想要一个锚点,当点击时,文本在“显示背景”和“显示背景”之间交替显示。 “显示文字”以及淡入淡出另一个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();
});
});
提前致谢。
答案 0 :(得分:117)
$(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");
});
切换隐藏或显示元素。使用切换可以达到相同的效果,只需单击两个链接并切换它们。
答案 1 :(得分:46)
最美丽的答案是...... 使用此函数扩展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示例中留下空格;-)
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 :(得分:37)
抱歉问题是我!这是不同步但这是因为我的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();
});
});
再次感谢您的帮助!
答案 3 :(得分:22)
改善和简化@ 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');
答案 4 :(得分:13)
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/
答案 5 :(得分:7)
你为什么不把它们叠加::
$("#clickedItem").click(function(){
$("#animatedItem").animate( // );
}).toggle( // <--- you just stack the toggle function here ...
function(){
$(this).text( // );
},
function(){
$(this).text( // );
});
答案 6 :(得分:6)
var el = $('#someSelector');
el.text(el.text() == 'view more' ? 'view less' : 'view more');
答案 7 :(得分:5)
使用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>
答案 8 :(得分: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 -------
答案 9 :(得分:2)
从other question修改我的回答,我会这样做:
$(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);
});
});
答案 10 :(得分:2)
使用此
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
答案 11 :(得分: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);
});
})();
答案 12 :(得分:1)
也许我过分简化了这个问题,但这就是我的用法。
$.fn.extend({
toggleText: function(a, b) {
$.trim(this.html()) == a ? this.html(b) : this.html(a);
}
});
答案 13 :(得分: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!");
答案 14 :(得分: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");
答案 15 :(得分: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");
});
答案 16 :(得分:1)
您还可以通过使用toggleClass()作为思想来切换文本。
.myclass::after {
content: 'more';
}
.myclass.opened::after {
content: 'less';
}
然后使用
$(myobject).toggleClass('opened');
答案 17 :(得分:0)
这不是非常干净和聪明的方式,但它很容易理解和使用somtimes - 它像奇数和偶数 - 布尔像:
var moreOrLess = 2;
$('.Btn').on('click',function(){
if(moreOrLess % 2 == 0){
$(this).text('text1');
moreOrLess ++ ;
}else{
$(this).text('more');
moreOrLess ++ ;
}
});
答案 18 :(得分: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");
}
});
});
答案 19 :(得分:0)
var jPlayPause = $("#play-pause");
jPlayPause.text(jPlayPause.hasClass("playing") ? "play" : "pause");
jPlayPause.toggleClass("playing");
这是使用jQuery的toggleClass()方法的一个想法。
假设你有一个id =&#34; play-pause&#34;并且你想在&#34; play&#34;之间切换文本。并且&#34;暂停&#34;。