0

抱歉,我是 jQuery 新手。所以我有这个带有两个 if else 语句的 jQuery 代码,我想合并它,因为我觉得这是不必要的重复。它们是有些不同的代码,因为一次作用于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
    }  
}); 

如何合并这两个代码?

4

2 回答 2

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 + "']");
....
于 2013-04-01T02:24:48.823 回答
2

您可以使用带逗号的多个选择器

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
}
于 2013-04-01T02:29:58.377 回答