【问题标题】:need an advice to avoid multiple functions需要建议以避免多种功能
【发布时间】:2014-03-20 16:47:27
【问题描述】:

我正在尝试使用 jQuery 编写一个允许我显示或隐藏 DIV 的函数。这里是代码示例,我只需要帮助重写函数以避免重复:

<ul id="link">
  <li>
    <a id="myLink1" href="javascript:;">Lister</a>
  </li>
  <li>
    <a id="myLink2" href="javascript:;">Afficher</a>
  </li>
</ul>

<div id="contenu">
<div id="myDiv1">             
  <p> Bienvenue </p> 
</div>
<div id="myDiv2">             
   <p> bob </p>
</div>
</div>

JAVASCRIPT

$(document).ready(function(){
       var par = $("#myDiv1");
       $(par).hide();
      $("#myLink1").click(function(e){
        $(par).toggle();
        e.preventDefault();
      });

    });

    $(document).ready(function(){
       var par = $("#myDiv2");
       $(par).hide();
      $("#myLink2").click(function(e){
        $(par).toggle();
        e.preventDefault();
      });

    });

JSFiddle

谢谢

【问题讨论】:

    标签: jquery html show-hide


    【解决方案1】:

    改为这样做:

    $(document).ready(function () {
        $('a').click(function (e) {
            e.preventDefault();
            $($(this).attr('href')).toggle();
        });
    });
    

    记得在链接的href 中添加divid

    工作 jsFiddle:http://jsfiddle.net/jbv4Y/1/

    【讨论】:

      【解决方案2】:

      1) 你只需要一个 DOM 就绪处理程序 $(document).ready(function(){...});

      2) 您可以使用 Attribute Starts With 选择器 [name^="value"] 来选择具有指定属性且值正好以给定字符串开头的元素。

      3) 使用 .each() 循环遍历所有 id 名称以myLink 开头的链接

      4) 使用 match() 和适当的正则表达式来获取链接的 id 号,然后分别使用该 id 号切换 div。

      $(document).ready(function () {
          $('[id^="myDiv"]').hide();
          $('[id^="myLink"]').each(function () {
              $(this).click(function (e) {
                  e.preventDefault();
                  var id = $(this).attr('id').match(/\d+$/);
                  $('#myDiv' + id).toggle();
              });
          });
      })
      

      Updated Fiddle

      【讨论】:

      • 这是一个很好的通用解决方案,但对于这种特殊情况,您也可以只在选择器中列出实际的 id,例如 $('#myDiv1, #myDiv1').hide(); 等。性能方面,它可能更快,如果代码必须运行 1000 次。 ;)
      • 我不明白为什么我调用函数时DIV没有隐藏
      • 你看过我的演示了吗?
      • 是的,我做到了,如果我点击“lister tout”然后点击“afficher membre”,包含“liste tout”的div没有隐藏,为什么?
      • 您只需添加.siblings('div').hide()。这是更新的演示:jsfiddle.net/jbv4Y/3
      【解决方案3】:

      您可以添加一些类和 href 来定位要切换的元素

      <ul id="link">
          <li>
              <a id="myLink1" class="trigger" href="#myDiv1" >Lister tout</a>
          </li>
          <li>
              <a id="myLink2" class="trigger" href="#myDiv2">Afficher Membre</a>
          </li>
      </ul>
      
      <div id="contenu">
          <div id="myDiv1" class="target">             
              <p> Bienvenue </p> 
          </div>
          <div id="myDiv2" class="target">             
              <p> bob </p>
          </div>
      </div>
      

      然后

      $(document).ready(function () {
          //add the class target to add divs that are targeted by the links
          $(".target").hide();
          //all the links which need to trigger the toggle should have the class trigger
          $(".trigger").click(function (e) {
              e.preventDefault();
              //the href property of the link must have the id of the div to toggle prefixed with #
              $($(this).attr('href')).toggle()
          });
      });
      

      演示:Fiddle


      您甚至可以使用基于索引的解决方案来简化它,如下所示,但我不推荐它

      <ul id="link">
          <li>
              <a id="myLink1" href="#" >Lister tout</a>
          </li>
          <li>
              <a id="myLink2" href="#">Afficher Membre</a>
          </li>
      </ul>
      
      <div id="contenu">
          <div id="myDiv1">
              <p> Bienvenue </p> 
          </div>
          <div id="myDiv2">
              <p> bob </p>
          </div>
      </div>
      

      然后

      $(document).ready(function () {
          var $targets = $("#contenu > div").hide();
      
          $("#link a").click(function (e) {
              e.preventDefault();
      
              $targets.eq($(this).parent().index()).toggle()
          });
      });
      

      演示:Fiddle

      这取决于#linkli元素的顺序和#contenu中的内容是否相同。

      【讨论】:

      • 当我点击一个 href 时,你能解释一下如何隐藏其他 Div 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多