【问题标题】:Trying to use variables to shorten my jquery尝试使用变量来缩短我的 jquery
【发布时间】:2011-06-23 01:36:38
【问题描述】:

我正在尝试使用变量来缩短以下代码(有效)。这似乎很多余,所以是的。

<script type="text/javascript">
$(document).ready(function(){
    $("div.first").click(function()
    {
        if ($('#firsthidden').css('display') == "block")
        {
            $("#firsthidden").hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }
        else
        {
            $("#firsthidden").show("blind", "slow");
            $("div.outer").animate({height:390},"slow");
        }
        if ($('#secondhidden').css('display') == "block")
        {
            $("#secondhidden").hide("blind", "slow");
        }
        if ($('#thirdhidden').css('display') == "block")
        {
            $("#thirdhidden").hide("blind", "slow");
        }
    });
    $("div.second").click(function()
    {
        if ($('#secondhidden').css('display') == "block")
        {
            $("#secondhidden").hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }
        else
        {
            $("#secondhidden").show("blind", "slow");
            $("div.outer").animate({height:390},"slow");
        }
        if ($('#firsthidden').css('display') == "block")
        {
            $("#firsthidden").hide("blind", "slow");
        }
        if ($('#thirdhidden').css('display') == "block")
        {
            $("#thirdhidden").hide("blind", "slow");
        }
    });
    $("div.third").click(function()
    {
        if ($('#thirdhidden').css('display') == "block")
        {
            $("#thirdhidden").hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }
        else
        {
            $("#thirdhidden").show("blind", "slow");
            $("div.outer").animate({height:390},"slow");
        }
        if ($('#secondhidden').css('display') == "block")
        {
            $("#secondhidden").hide("blind", "slow");
        }
        if ($('#firsthidden').css('display') == "block")
        {
            $("#firsthidden").hide("blind", "slow");
        }
    });

});
</script>

所以我正在尝试使用变量来缩短它。我已经把代码逻辑写下来了,所以我猜这是一个语法/格式问题。这是我的尝试:

<script type="text/javascript">
var x = null;
var a = null;
var b = null;

$(document).ready(function(){
    $("#first").click(function()
    {
        x = $("#firsthidden");
        a = $("#secondhidden");
        b = $("#thirdhidden");
    });
    $("#second").click(function()
    {
        x = $("#secondhidden");
        a = $("#firsthidden");
        b = $("#thirdhidden");
    });
    $("#third").click(function()
    {
        x = $("#thirdhidden");
        a = $("#firsthidden");
        b = $("#secondhidden");
    });
    $("div.clicked").click(function()
    {
        if (x.css('display') == "block")
        {
            $(x.hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }
        else
        {
            x.show("blind", "slow");
            $("div.outer").animate({height:390},"slow");
        }
        if (a.css('display') == "block")
        {
            a.hide("blind", "slow");
        }
        if (b.css('display') == "block")
        {
            b.hide("blind", "slow");
        }
    });
});
</script>

【问题讨论】:

  • 这是用于类似于标签内容的内容吗?
  • 上次我看到有人使用 x、a 和 b 之类的变量名称时,开发人员作为一个小组去找经理,并试图解雇这个人。
  • 我打算在代码工作后更改它们>.>

标签: jquery variables syntax


【解决方案1】:

您应该能够将所有代码简化为:

$(document).ready(function() {

    var all = $('#firsthidden, #secondhidden, #thirdhidden'),
        arr = ['div.first', 'div.second', 'div.third'];

    all.each(function(i) {
        var this_hidden = this;

        $(arr[i]).click(function() {
            var the_height = $(this_hidden).css('display') == 'block' ? 200 : 390;
            $(this_hidden).toggle("slow", "linear");
            $("div.outer").animate({height: the_height },"slow");
            all.not(this_hidden).hide("slow", "linear");
        });
    });

});
  • 缓存'#firsthidden, #secondhidden, #thirdhidden'元素到all

  • 创建一个选择器数组以获取点击处理程序'div.first', 'div.second', 'div.third'

  • 使用toggle()[docs] 方法来显示或隐藏"#...hidden" 元素(this_hidden) 而不是使用if 语句

  • 使用由this_hidden 表示的"#...hidden" 元素来确定为"div.outer" 设置动画的适当高度

  • 只需.hide() 其他两个"#...hidden" 元素,没有if,不包括使用not()[docs] 方法切换的元素。


编辑:替换了动画"div.outer" 的缺失行。感谢@natedavisolds 指出。

编辑 2: 我的 hidden 元素选择器错误。我有$('#firsthidden', '#secondhidden', '#thirdhidden') 而不是$('#firsthidden, #secondhidden, #thirdhidden')

另外,我从问题中复制了颠倒的"blind""slow"

固定。

编辑 3: 我设置 the_height 变量太晚了。将它向上移动了一行,使其在动画开始之前运行,并且可以正常工作。

为我没有测试我的代码而感到羞耻!!!

示例: http://jsfiddle.net/NnyGR/

【讨论】:

  • +1 非常好。但是,我没有看到它解决 $("div.outer") 的动画
  • @natedavisolds:是的。我一定把那个删了。正在更新...谢谢!
  • 比我预想的还要好。非常感谢!
  • @Bradley:啊,我弄乱了hidden 项目的选择器,而您将"blind""slow" 颠倒了,我将其复制到我的答案中。我会在一秒钟内修复它。 :o) (另外,我假设您为 "blind" 缓动加载了 jQueryUI。)
  • @patrickdw:嗯,它会在第二次点击时为 div.outer 设置动画。除此之外,它什么也没做。我认为每个方法都有问题,但我真的不知道...
【解决方案2】:
 $("div.clicked").click(function()
    {
        if (x.css('display') == "block")
        {
            $(x.hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }

需要

 $("div.clicked").click(function()
    {
        if (x.css('display') == "block")
        {
            x.hide("blind", "slow");
            $("div.outer").animate({height:200},"slow");
        }

【讨论】:

    【解决方案3】:

    试试这个。

    $(document).ready(function(){
        $("#first").click(function()
        {
            MyFunction($("#firsthidden"), $("#secondhidden"), $("#thirdhidden"));
        });
        $("#second").click(function()
        {
            MyFunction($("#secondhidden"), $("#firsthidden"), $("#thirdhidden"));
        });
        $("#third").click(function()
        {
            MyFunction($("#thirdhidden"), $("#secondhidden"), $("#firsthidden"));
        });
        function MyFunction(x, a, b)
        {
            if (x.css('display') == "block")
            {
                $(x.hide("blind", "slow");
                $("div.outer").animate({height:200},"slow");
            }
            else
            {
                x.show("blind", "slow");
                $("div.outer").animate({height:390},"slow");
            }
            if (a.css('display') == "block")
            {
                a.hide("blind", "slow");
            }
            if (b.css('display') == "block")
            {
                b.hide("blind", "slow");
            }
        });
    });
    

    【讨论】:

      【解决方案4】:

      如果您想要类似选项卡式内容的内容。有插件或者你可以自己写。可能类似于http://jsfiddle.net/XYGHQ/6/

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 2015-09-12
        • 2020-07-07
        相关资源
        最近更新 更多