如何避免此jQuery代码中的重复代码?

时间:2013-02-05 19:39:37

标签: javascript jquery simplify iteration

我正在创建一个网站,这段代码让我在1 .html文件中有几个页面。可以避免此代码的迭代性吗?可以简化吗?

<script type="text/javascript">
        var x = 300;
        $(function() { 
            $("#indexLink").click(function() { 
                $("#content>div").not("#start").hide(x);
                $("#index").show(x);
                $('nav>ul>li').removeClass('active');
                $('#indexLink').addClass('active');
            });

            $("#leerlingLink").click(function() { 
                $("#content>div").not("#start").hide(x); 
                $("#leerling").show(x); 
                $('nav>ul>li').removeClass('active');
                $('#leerlingLink').addClass('active');
            });

            $("#bestemmingLink").click(function() { 
                $("#content>div").not("#start").hide(x); 
                $("#bestemming").show(x);
                $('nav>ul>li').removeClass('active');
                $('#bestemmingLink').addClass('active');
            });

            $("#betalingLink").click(function() { 
                $("#content>div").not("#start").hide(x); 
                $("#betaling").show(x);
                $('nav>ul>li').removeClass('active');
                $('#betalingLink').addClass('active');
            });
        });

</script>

3 个答案:

答案 0 :(得分:1)

假设被点击的东西不是锚链接,你可以给元素提供所有相同的类并写一次 -

编辑:根据这些是锚链接的信息进行了更改。

$('.classname').click(function(event) {
    event.preventDefault(); 
    $("#content>div").not("#start").hide(x);
    var idString = this.id
    var shortIDString = idString.slice(0,-4); //remove the 'Link'
    $("#" + shortIDString).show(x);
    $('nav>ul>li').removeClass('active');
    $(this).addClass('active');
});

答案 1 :(得分:0)

您可以使用for循环并构造选择器:

$(function () {
    var items = ["index", "leerling", "bestemming", "betaling"];
    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        $("#" + item + "Link").click(function () {
            $("#content>div").not("#start").hide(x);
            $("#" + item).show(x);
            $('nav>ul>li').removeClass('active');
            $('#' + item + 'Link').addClass('active');
        });
    }
});

您还可以向所有#whateverLinks添加处理程序,然后根据事件目标的id值检测链接名称。

答案 2 :(得分:0)

iterative-ness是什么意思?

如果你想让你的代码干,你可以写下这样的东西:

<script type="text/javascript">
    var x = 300;
    $(function () {
        $("#indexLink,#betalingLink,#bestemmingLink,#leerlingLink").click(function () {
            $("#content>div").not("#start").hide(x);
            $("#"+$(this).attr("id").slice(0,-4)).show(x);
            $('nav>ul>li').removeClass('active');
            $('#indexLink').addClass('active');
        });
    });
</script>

这将占用所有选择器,当时一个,并使所有选择器运行您的代码,基本上与您键入的相同,但仅在一个选择器中

修改

固定div显示

<强> EDIT2

添加jsfiddle以显示它正常工作:http://jsfiddle.net/NicosKaralis/Vurjf/