【问题标题】:Is there a better way to write this Show/hide JQuery code?有没有更好的方法来编写这个显示/隐藏 JQuery 代码?
【发布时间】:2012-08-14 20:30:25
【问题描述】:

好的,我终于让它按照我想要的方式工作了。

我需要它具有不同的显示/隐藏按钮,并且如果要求显示另一个 DIV 则隐藏,我还需要将我的 a 标签远离我的 DIV 标签以及添加和删除活动类。但是,即使它有效,我也知道它真的很乱。

这是一个链接:http://jsfiddle.net/qKWC8/24/

这是 JS:

$(document).ready(function() {

    // Feature box 1

    $('#show1').click(function() {
        $('#show2,#show3,#show4,#show5,#show6').removeClass("active");
        $("#feature-2,#feature-3,#feature-4,#feature-5,#feature-6").hide();
        $("#feature-1").show();
        $(this).addClass("active");
    });

    $('#hide1').click(function() {
        $(this).parent().hide();
        $('#show1').removeClass("active");
    });

    // Feature box 2

    $('#show2').click(function() {
        $('#show1,#show3,#show4,#show5,#show6').removeClass("active");
        $("#feature-1,#feature-3,#feature-4,#feature-5,#feature-6").hide();
        $("#feature-2").show();
        $(this).addClass("active");
    });

    $('#hide2').click(function() {
        $(this).parent().hide();
        $('#show2').removeClass("active");
    });

    // Feature box 3

    $('#show3').click(function() {
        $('#show1,#show2,#show4,#show5,#show6').removeClass("active");
        $("#feature-1,#feature-2,#feature-4,#feature-5,#feature-6").hide();
        $("#feature-3").show();
        $(this).addClass("active");
    });

    $('#hide3').click(function() {
        $(this).parent().hide();
        $('#show3').removeClass("active");
    });

    // Feature box 4

    $('#show4').click(function() {
       $('#show1,#show2,#show3,#show5,#show6').removeClass("active");
        $("#feature-1,#feature-2,#feature-3,#feature-5,#feature-6").hide();
        $("#feature-4").show();
        $(this).addClass("active");
    });

    $('#hide4').click(function() {
        $(this).parent().hide();
        $('#show4').removeClass("active");
    });

    // Feature box 5

    $('#show5').click(function() {
       $('#show1,#show2,#show3,#show4,#show6').removeClass("active");
        $("#feature-1,#feature-2,#feature-3,#feature-4,#feature-6").hide();
        $("#feature-5").show();
        $(this).addClass("active");
    });

    $('#hide5').click(function() {
        $(this).parent().hide();
        $('#show5').removeClass("active");
    });

    // Feature box 6

    $('#show6').click(function() {
       $('#show1,#show2,#show3,#show4,#show5').removeClass("active");
        $("#feature-1,#feature-2,#feature-3,#feature-4,#feature-5").hide();
        $("#feature-6").show();
        $(this).addClass("active");
    });

    $('#hide6').click(function() {
        $(this).parent().hide();
        $('#show6').removeClass("active");
        });
    });

这是 HTML:

<a href="#" id="show1">Show</a>
<a href="#" id="show2">Show</a>
<a href="#" id="show3">Show</a>
<a href="#" id="show4">Show</a>
<a href="#" id="show5">Show</a>
<a href="#" id="show6">Show</a>

<div id="feature-1">
    Fill this space with really interesting content 1. <a href="#" id="hide1">Hide</a>
</div>

<div id="feature-2">
    Fill this space with really interesting content 2. <a href="#" id="hide2">Hide</a>
</div>


<div id="feature-3">
    Fill this space with really interesting content 3. <a href="#" id="hide3">Hide</a>
</div>

<div id="feature-4">
    Fill this space with really interesting content 4. <a href="#" id="hide4">Hide</a>
</div>

<div id="feature-5">
    Fill this space with really interesting content 5. <a href="#" id="hide5">Hide</a>
</div>

<div id="feature-6">
    Fill this space with really interesting content 6. <a href="#" id="hide6">Hide</a>
</div>

这是 CSS:

#feature-1,#feature-2,#feature-3,#feature-4,#feature-5,#feature-6 {
    height:300px;
    background-color: #99CCFF;
    padding:20px;
    margin-top:10px;
    border-bottom:5px solid #3399FF;
    display: none;
}
.active{background:#00FFFF;}

【问题讨论】:

  • 那么,这些块中的每一个都是相同的,除了什么?表示有问题的 div 的数字。有什么方法可以利用这些信息?

标签: javascript jquery html css optimization


【解决方案1】:

您可以使用类而不是 ID。根据您当前的标记,我已经缩小了您的代码,请尝试以下操作:

$(document).ready(function() {

    $('a[id^=show]').click(function() {
        var which = this.id.slice(-1);
        $(this).addClass("active").siblings('a').removeClass("active");
        $("div[id^='feature']").hide();
        $("#feature-"+which).show();
    });

    $('a[id^=hide]').click(function() {
        var which = this.id.slice(-1);
        $(this).parent().hide();
        $('#show'+which).removeClass("active");
    });

});

Fiddle

【讨论】:

    【解决方案2】:
    <a href="#" onclick="myfunction('show1','feature-1')" class="anchors" id="show1">Show</a>
    <a href="#" onclick="myfunction('show2','feature-2')" class="anchors" id="show2">Show</a>
    <a href="#" onclick="myfunction('show3','feature-3')" class="anchors" id="show3">Show</a>
    <a href="#" onclick="myfunction('show4','feature-4')" class="anchors" id="show4">Show</a>
    <a href="#" onclick="myfunction('show5','feature-5')" class="anchors" id="show5">Show</a>
    <a href="#" onclick="myfunction('show6','feature-6')" class="anchors" id="show6">Show</a>
    
    <div class="features" id="feature-1">
    Fill this space with really interesting content 1. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    
    <div class="features"  id="feature-2">
    Fill this space with really interesting content 2. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    
    
    <div class="features" id="feature-3">
    Fill this space with really interesting content 3. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    
    <div class="features" id="feature-4">
    Fill this space with really interesting content 4. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    
    <div class="features" id="feature-5">
    Fill this space with really interesting content 5. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    
    <div class="features" id="feature-6">
    Fill this space with really interesting content 6. <a href="#" onclick="$(this).parent().hide();">Hide</a>
    </div>
    /// javascript
    
    function myfunction(anchor_id, feature_id){
     $('.anchors').removeClass("active");
        $(".features").hide();
        $("#"+feature_id).show();
        $("#"+anchor_id).addClass("active");
    }
    

    我已经最小化了你的一些 JS 代码希望对你有帮助

    【讨论】:

      【解决方案3】:

      几乎总是有更好的方法... ;)

      JavaScript:

      $("document").ready(function(){
          $("#links a").click(function(){
              $(".feature").hide();
              $("#features div").eq($(this).index()).show();
          });
          $("a.hide").click(function(){
              $(this).parent("div").hide();
          });
      });
      

      HTML:(我稍微改变了你的 HTML 结构)

      <div id="links">
          <a href="#">Show</a>
          <a href="#">Show</a>
          ...
      </div>
      
      <div id="features">
          <div class="feature">
              Fill this space with really interesting content 1. <a href="#" class="hide">Hide</a>
          </div>
          <div class="feature">
              Fill this space with really interesting content 2. <a href="#" class="hide">Hide</a>
          </div>
          ...
      </div>
      

      DEMO (JSFiddle)

      【讨论】:

      • 效果很好!它怎么知道哪个标签分配给哪个DIV?
      • 代码使用索引。所以当你点击例如将显示div#links 中的第四个链接,div#features 中的第四个.feature 容器。
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多