由于来自jQuery的.toggle()
是deprecated,我正在寻找一个新的简单解决方案,这将使我能够创建一个“阅读更多”按钮,该按钮可以滑动一个段落,同时将按钮文本更改为“阅读更少“。
我把这个工作代码放在一起:
var moreText = "Read more";
var lessText = "Read less";
$(document).ready(function () {
$("a.readmorebtn").text(moreText);
$("a.readmorebtn").toggle(function () {
$("a.readmorebtn").text(lessText);
$("p.more").slideToggle(0);
},
function () {
$("a.readmorebtn").text(moreText);
$("p.more").slideToggle(0);
});
});
http://jsfiddle.net/approach/gDvyR/
你会在小提琴中看到左侧的选项上选中了'Migrate 1.1.0',这是使这个(最新)版本的jQuery以这种方式使.toggle()
工作的唯一方法
我的问题是,你能想到另一种执行相同功能但不使用.toggle()
和迁移的方法吗?
道歉,如果你觉得这个问题已在其他地方得到解答,但我一直在寻找解决办法“相对简单”的提示,而没有真正看到任何明确的方法。不幸的是,对jQuery来说,这对我来说似乎并不那么直接!
很多,非常感谢。
答案 0 :(得分:5)
我个人认为这里的所有答案都过于精细,无法满足您的需求。这应该做的很好,它适用于多次出现。 http://jsfiddle.net/BramVanroy/gDvyR/5/
var moreText = "Read more",
lessText = "Read less",
moreButton = $("a.readmorebtn");
moreButton.click(function () {
var $this = $(this);
$this.text($this.text() == moreText ? lessText : moreText);
$this.next("p.more").slideToggle("fast");
});
答案 1 :(得分:1)
这是一个通用的替代品:
$.fn.toggleFuncs = function() {
var functions = Array.prototype.slice.call(arguments),
_this = this.click(function(){
var i = _this.data('func_count') || 0;
functions[i%functions.length]();
_this.data('func_count', i+1);
});
}
您可以像使用切换一样使用它:
$('something').toggleFuncs(f1, f2, f3);
<强> Demonstration 强>