jQuery弃用了'.toggle()'。寻求替代方法

时间:2013-02-26 09:24:42

标签: javascript jquery

由于来自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来说,这对我来说似乎并不那么直接!

很多,非常感谢。

2 个答案:

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