代码之家  ›  专栏  ›  技术社区  ›  tahdhaze09

有没有更好的方法来编写这个jquery脚本?

  •  1
  • tahdhaze09  · 技术社区  · 15 年前

    所以剧本行得通,但似乎很长。我想可能有一些捷径我可以走,也许使用数组?但我在JS是个新手,在JQuery也是个新手。

    它做什么:

    我有一个十个问题的列表,我想要一个图形(加号)并在单击减号时切换它。它还将使用滑动开关显示答案。

    代码如下:

    <script type="text/javascript" src="jquery-1.3.2.js"></script>
    <script type="text/javascript">                                         
       $(document).ready(function() {
       $(".divOne").hide();
       $(".divTwo").hide();
       $(".divThree").hide();
       $(".divFour").hide();
       $(".divFive").hide();
       $(".divSix").hide();
       $(".divSeven").hide();
       $(".divEight").hide();
       $(".divNine").hide();
       $(".divTen").hide();
    
        $(".bbone").click(function(){
         $(".divOne").slideToggle("slow");
         $("#button1").toggleClass("down");
         });
    
         $(".bbtwo").click(function(){
         $(".divTwo").slideToggle("slow");
         $("#button2").toggleClass("down");
         });
    
         $(".bbthree").click(function(){
         $(".divThree").slideToggle("slow");
         $("#button3").toggleClass("down");
         });
    
         $(".bbfour").click(function(){
         $(".divFour").slideToggle("slow");
         $("#button4").toggleClass("down");
         });
    
         $(".bbfive").click(function(){
         $(".divFive").slideToggle("slow");
         $("#button5").toggleClass("down");
         });
    
         $(".bbsix").click(function(){
         $(".divSix").slideToggle("slow");
         $("#button6").toggleClass("down");
         });
    
         $(".bbseven").click(function(){
         $(".divSeven").slideToggle("slow");
         $("#button7").toggleClass("down");
         });
    
         $(".bbeight").click(function(){
         $(".divEight").slideToggle("slow");
         $("#button8").toggleClass("down");
         });
    
         $(".bbnine").click(function(){
         $(".divNine").slideToggle("slow");
         $("#button9").toggleClass("down");
         });
    
         $(".bbten").click(function(){
         $(".divTen").slideToggle("slow");
         $("#button10").toggleClass("down");
         });
    
     });                                   
    </script>
    

    这是CSS:

    <style type="text/css">
    body
    {
    font-family:Verdana, Arial, Helvetica, sans-serif;
    }
    .divOne, .divTwo, .divThree, .divFour, .divFive, .divSix, .divSeven, .divEight, .divNine, .divTen
    {
    border:1px solid #CC0000;
    background-color:#efefef;
    width:580px;
    margin-top:5px;
    font-size:10px;
    padding:5px;
    clear:left;
    }
    .one, .two, .three, .four, .five, .six, .seven, .eight, .nine, .ten
    {
    padding-left:10px;
    text-decoration:none;
    color:#CC0000;
    font-variant:small-caps;
    font-size:14px;
    }
    .bbone, .bbtwo, .bbthree, .bbfour, .bbfive, .bbsix,.bbseven,.bbeight,.bbnine,.bbten
    {
    vertical-align:middle;
    }
    .question
    {
    height:auto;
    background-color:#fff;
    margin-bottom:10px;
    width:800px;
    }
    p {
    margin:0;
    padding:0;
    float:left;
    width:16px;
    height:16px;
    background-image:url(images/add.png);
    background-repeat:no-repeat;       
        }
    
    p.down {
    float:left;
    width:16px;
    height:16px;
    background-image:url(images/delete.png);
    background-repeat:no-repeat;
        }
    
    .wwwLink
    {
    padding-left:20px;
    background: transparent url(images/world_go.png) no-repeat center left;
    }
    </style>
    

    这是HTML:

    <body>
    <div class="question">
    <p id="button1" class="bbone">&nbsp;</p><a href="#" class="one">Myth No. 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. .&nbsp;</a><br/>
    <div class="divOne">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. 
    <a href="http://stackoverflow.com/questions/ask" class="wwwLink"  target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button2" class="bbtwo">&nbsp;</p><a href="#" class="two">Myth No. 2:  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divTwo">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. <br/><br/> 
    <a href="http://stackoverflow.com/questions/ask" class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button3" class="bbthree">&nbsp;</p><a href="#" class="three">Myth No. 3: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divThree">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button4" class="bbfour">&nbsp;</p><a href="#" class="four">Myth No. 4: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divFour">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button5" class="bbfive">&nbsp;</p><a href="#" class="five">Myth No. 5: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divFive">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam.  <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button6" class="bbsix">&nbsp;</p><a href="#" class="six">Myth No. 6:  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divSix">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam.  <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button7" class="bbseven">&nbsp;</p><a href="#" class="seven">Myth No. 7: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divSeven">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. 
    </div>
    </div>
    
    <div class="question">
    <p id="button8" class="bbeight">&nbsp;</p><a href="#" class="eight">Myth No. 8: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divEight">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. 
    </div>
    </div>
    
    <div class="question">
    <p id="button9" class="bbnine">&nbsp;</p><a href="#" class="nine">Myth No. 9: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divNine">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam.  <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    
    <div class="question">
    <p id="button10" class="bbten">&nbsp;</p><a href="#" class="ten">Myth No. 10: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a><br/>
    <div class="divTen">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam.  <br/><br/>
    <a href="http://stackoverflow.com/questions/ask"  class="wwwLink" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
    </div>
    </div>
    <body>
    
    3 回复  |  直到 15 年前
        1
  •  13
  •   Doug Neiner    15 年前

    使用它而不是您发布的jquery:

    $(document).ready(function() {
      $('div.question')
        .children('div').hide().end()
        .children('p').click(function(){
          $(this).toggleClass('down').next().slideToggle("slow");
        });
    });
    

    另外,你真的应该巩固你的课程。对于您的所有问题,我将使用此更新的HTML模式:

    <div class="question">
      <p class="button">&nbsp;<a href="#">Myth No. 2:  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam egestas. &nbsp;</a></p>
      <div>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque interdum purus porta urna aliquet consectetur. Maecenas tempus tellus sed augue tincidunt molestie fermentum lorem porttitor. Nam tincidunt elit vitae quam. <br/><br/> 
      <a href="http://stackoverflow.com/questions/ask" target="_blank">Lorem ipsum dolor sit amet, consectetur adipiscing. </a>
      </div>
    </div>
    

    您的CSS将遵循以下形式:

    .question       { }
    .button         { } /* Instead of bbOne, bbTwo, etc*/
    .question div   { } /* Instead of divOne, divTwo, etc */
    .question div a { } /* Instead of wwwLink */
    

    然后我将使用这个稍微更新的jquery:

    $(document).ready(function() {
      $('div.question')
        .children('div').hide().end()
        .find('p > a').click(function(e){
          $(this)
            .parent().toggleClass('down')
            .next().slideToggle("slow");
          e.preventDefault();
        });
    });
    
        2
  •  9
  •   John Boker    15 年前

    类似的东西

    $(document).ready(function(){
        $('.question div').hide();
        $('.question p').click(function(){
            $(this).next('div').slideToggle("slow");
            $(this).addClass('down');
        });
    });
    

    您还可以修改一些标记并使用jquery用户界面协议:

    http://docs.jquery.com/UI/Accordion

        3
  •  1
  •   fredw    15 年前

    给您的div一个公共类,并使用id进行标识,也就是说,不是所有的id,而是在顶层div上有一个id,然后在子id上有通用类名。也要避免使用 和<br/>标记,但要使用CSS填充/边距。沿着这些线的东西:

    <div class="question" id="question1">
       <div class="questionText">
          <p class="questionButton"></span>
          <a href="#">Myth No. 1: ...</a>
       </div>
       <div class="questionAnswer">
           ...
       </div>
    </div>
    

    这也将简化您的CSS。只需使用通用类名,而不是枚举所有问题。

    通常,您只需要对类名使用jquery,它将自己附加到所有元素上。另外,在jquery单击处理程序中,您很少需要使用元素的ID,您可以使用$(this)获取当前元素,然后使用遍历函数获取关联的元素。这样地:

       $(document).ready(function() {
           $(".questionAnswer").hide();
    
           $(".questionButton").click(function(){
               $(this).parent().find(".questionAnswer").slideToggle("slow");
               $(this).toggleClass("down");
           });
       });
    

    弗莱德