Jquery Accordion从零开始:手风琴和手风琴的标记Jquery表现Q.

时间:2012-03-10 22:24:30

标签: jquery html performance accordion jquery-ui-accordion

非常感谢您的回复。

我正在写一个jquery手风琴,但想知道我的标记和jquery是否正确..(与语义html保持一致)

我的第一个问题是在我正在使用它(JSFIDDLE example)的上下文中对于accourdion的正确语义html是什么..目前我使用ul ...与li和div为内容..

第二个问题,这个jquery可以改进,是否可以测量特定jQuery脚本的性能?

JSFIDDLE example

$(document).ready(function(){
    //store the exact block of html we are working with... the context
    var $context = $("ul#accordion")[0];
    console.log($context);
    //check the context
    $("li a", $context).live("click", function(e){
       //store this due to being used more than once
        var $clicked = $(this);
        //slide anything up thats already open
        $("li div", $context).slideUp(200);
        //test to see if the div is hidden or not..
        //slide down if hidden
        if($clicked.next().is(":hidden")){
            $clicked.next().slideDown(200);
        };
    //prevent default behaviour 
    e.preventDefault();
    });

});​

1 个答案:

答案 0 :(得分:1)

  • 由于您使用的是$(selector, context)(等于$(context).find(selector)),因此我建议只合并一个元素:$('ul#accordion li')
  • 使用$(ancestor).on('event', 'selector', fn)代替$('ancestor selector').live(fn)
  • e.preventDefault()放在首位。只要代码中出现错误,就不会出现负面副作用。
  • 我的其他建议更改会在您的问题评论中得到解决。

代码:

$(document).ready(function(){
    // :first can be omitted, but it's an literal translation
    $("ul#accordion:first li").on("click", "a", function(e) {
        // prevent default behaviour 
        e.preventDefault();

        // slide anything up thats already open
        $("li div", this).slideUp(200);

        // slide down if hidden
        $clicked.next(':hidden').slideDown(200);
    });
});