0

我在一个页面上有几个标签有这个标记

<div id="holiday-details-nav">
                <ul>
                    <li><a class="holidaydetails-description" title="Overview" href="#tab-holidaydetails-overview">Overview</a></li>
                    <li><a class="holidaydetails-included" title="Rooms" href="#tab-holidaydetails-rooms">Rooms</a></li>
                    <li><a class="holidaydetails-itinerary" title="Rates" href="#tab-holidaydetails-rates">Rates</a></li>  
                    <li><a class="holidaydetails-accommodation" title="Information" href="#tab-holidaydetails-information">Information</a></li>                         
                    <li><a class="holidaydetails-reviews" title="Reviews" href="#tab-holidaydetails-reviews">Reviews</a></li>
                </ul>
            </div>

这些选项卡中内容的隐藏和显示由一些 JQuery 代码控制,因此开始

$(document).ready(function () {
    // Hide all tabs apart from the overview
    $('#holiday-details-tabs div:#tab-holidaydetails-rooms').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-rates').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-information').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-reviews').hide();
    ...

问题是,如果我添加、删除或重命名选项卡(就像我刚刚所做的那样),那么我必须更改所有这些代码。我想要的是添加、重命名或删除任意数量的选项卡,但不必修改此 JQuery 代码。

我并不是真的要找人为我编写解决方案,而是想开始讨论可用于避免这种命名依赖的工具、技术等。

编辑

单击选项卡时,我也有一点丑陋。

$('#holiday-details-nav ul li a').click(function () {
    // Remove active class from all links
    $('#holiday-details-nav ul li').removeClass('active');
    //Set clicked link class to active
    $(this).parent().addClass('active');
    // Set variable currentTab to value of href attribute of clicked link
    var currentTab = $(this).attr('href');
    // Hide all tabs
    $('#holidaydetails-description-imagecontainer').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-overview').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-rooms').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-rates').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-information').hide();
    $('#holiday-details-tabs div:#tab-holidaydetails-reviews').hide();

    $('#holiday-details-bottom').show();
    $('#holiday-details-left-booknow').show();

    // Show div with id equal to variable currentTab
    $(currentTab).show();

    $('#holidaydetails-description-imagecontainer').show();

    return false;
});

谢谢,

萨钦

4

2 回答 2

1

您可以为每个概述之外的所有 CSS分配一个通用的CSS 类,然后使用 jQuery 类选择器将它们全部隐藏。例如:tabli

<div id="holiday-details-nav">
  <ul>
    <li><a class="holidaydetails-description" title="Overview" href="#tab-holidaydetails-overview">Overview</a></li>
    <li><a class="tab holidaydetails-included" title="Rooms" href="#tab-holidaydetails-rooms">Rooms</a></li>
    <li><a class="tab holidaydetails-itinerary" title="Rates" href="#tab-holidaydetails-rates">Rates</a></li>  
    <li><a class="tab holidaydetails-accommodation" title="Information" href="#tab-holidaydetails-information">Information</a></li>                         
    <li><a class="tab holidaydetails-reviews" title="Reviews" href="#tab-holidaydetails-reviews">Reviews</a></li>
  </ul>
</div>

然后,隐藏除概述之外的每个选项卡:

$("holiday-details-nav .tab").hide();

或者反过来,即添加一个特定的类到概览中,并隐藏所有其他选项卡:

<div id="holiday-details-nav">
  <ul>
    <li><a class="overview holidaydetails-description" title="Overview" href="#tab-holidaydetails-overview">Overview</a></li>
    <li><a class="holidaydetails-included" title="Rooms" href="#tab-holidaydetails-rooms">Rooms</a></li>
    <li><a class="holidaydetails-itinerary" title="Rates" href="#tab-holidaydetails-rates">Rates</a></li>  
    <li><a class="holidaydetails-accommodation" title="Information" href="#tab-holidaydetails-information">Information</a></li>                         
    <li><a class="holidaydetails-reviews" title="Reviews" href="#tab-holidaydetails-reviews">Reviews</a></li>
  </ul>
</div>

然后,要隐藏,选择所有选项卡,并使用以下命令排除概览.not()

$("#holiday-details-nav a").not(".overview").hide();
于 2012-09-14T16:37:29.890 回答
1

在处理选项卡时,尤其是在您拥有的设置中(其中href属性具有与其相关的 div 的 id),您不需要硬编码任何内容、使用title属性或使用任何额外的类。看这个:

http://jsfiddle.net/FAM2s/2/

它所做的就是找到所有选项卡的详细 div 并将它们全部隐藏,然后只显示与刚刚单击的内容相关的一个。

只要您href为链接设置正确的属性,并使用这些 id 设置相应的 div,它就会起作用,无论您何时添加/删除多少个选项卡。

于 2012-09-14T17:03:50.193 回答