合并这两个if ... else语句

时间:2013-04-01 02:19:56

标签: javascript jquery

抱歉,我是jQuery的新手。所以我有这个jQuery代码,带有两个if else语句,我想要合并,因为我觉得这是一个不必要的重复。它们有些不同的代码,因为一次代理ul#tabs li a而另一代代理ul.tabs li a。如何合并它们以提高性能?这是代码:

$(document).ready(function() 
{
    var hash = location.hash;

    $(".tab_content").hide(); //Hide all content

    if ($("ul#tabs li a[href='" + hash + "']").length) 
    { 
        $("ul#tabs li a[href='" + hash + "']")
            .addClass("active")
            .parent()
            .addClass("active"); //Activate tab

        $(hash).show();
    }
    else 
    {
        do stuff
    }  

    if ($("ul.tabs li a[href='" + hash + "']").length) 
    {
        $("ul.tabs li a[href='" + hash + "']")
            .addClass("active")
            .parent()
            .addClass("active"); //Activate tab

        $(hash).show();
    }
    else 
    {
        do stuff
    }  
}); 

如何合并这两个代码?

2 个答案:

答案 0 :(得分:3)

逗号运算符,在CSS和jQuery中用于指定多个选择器:

    var sel = $("ul.tabs li a[href='" + hash + "'], ul#tabs li a[href='" + hash + "']");
    if (sel.length) { 
        sel.addClass("active").parent().addClass("active"); //Activate tab
        $(hash).show();
    }
    else {
        do stuff
    }

您可以进一步减少重复:

var sel = $("ul.tabs, ul#tabs").find("li a[href='" + hash + "']");
....

答案 1 :(得分:2)

You could utilize multiple selectors with a comma

if ($("ul.tabs li a[href='" + hash + "'], ul#tabs li a[href='" + hash + "'] ").length) {

对于您的情况,您可以使用each()方法:

var el = $("ul.tabs li a[href='" + hash + "'], ul#tabs li a[href='" + hash + "']");

if(el.length) {
    el.each(function() {
        $(this).addClass("active").parent().addClass("active");
        $(hash).show();
    }); 
} else {
   // do else stuff
}