jqueryaccordion从头开始:Accordion&;Jquery性能Q

jqueryaccordion从头开始:Accordion&;Jquery性能Q,jquery,html,performance,accordion,jquery-ui-accordion,Jquery,Html,Performance,Accordion,Jquery Ui Accordion,非常感谢您的回复 我正在编写一个jquery手风琴,但不知道我的标记和jquery是否正确……(与语义html保持一致) 我的第一个问题是,在我所使用的上下文()中,什么是正确的解释语义html。。目前我使用ul。。。内容中有一个li和一个div 第二个问题,这个jquery是否可以改进,是否还需要衡量特定jquery脚本的性能 由于您仅在一个元素上使用$(选择器,上下文)(等于$(上下文)。查找(选择器)),因此我建议合并它们:$('ul#accordion li') 使用而不是$(“祖先

非常感谢您的回复

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

我的第一个问题是,在我所使用的上下文()中,什么是正确的解释语义html。。目前我使用ul。。。内容中有一个li和一个div

第二个问题,这个jquery是否可以改进,是否还需要衡量特定jquery脚本的性能

  • 由于您仅在一个元素上使用
    $(选择器,上下文)
    (等于
    $(上下文)。查找(选择器)
    ),因此我建议合并它们:
    $('ul#accordion li')
  • 使用而不是
    $(“祖先选择器”).live(fn)
  • e.preventDefault()
    放在顶部。只要代码中出现错误,负面的副作用就不会发生
  • 我建议的其他修改在对你的问题的评论中提到
代码:


我觉得两者都不错。出于您的兴趣,您可能希望与jQueryUI的源示例进行比较:我会做
$clicked.next(':hidden').slideDown(200)而不是
如果(…)
。此外,由于id必须是唯一的,
[0]
可以在
$context
处省略
$clicked
只使用一次,因此我建议将其删除,并直接使用
$(“li div”,this)
。太好了,我从未想过这样做-丢失了两行:P tylook不错,我注意到的唯一一件事是
$context
变量。通常为包含jQuery对象的变量添加
$
前缀,则
$context
包含DOM对象。但这真的没关系:)谢谢罗布,这正是我想要的答案,非常感谢。
$(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();
    });

});​
$(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);
    });
});