Javascript 如何根据元素内的锚来检测要显示的适当元素?

Javascript 如何根据元素内的锚来检测要显示的适当元素?,javascript,jquery,html,twitter-bootstrap,twitter-bootstrap-2,Javascript,Jquery,Html,Twitter Bootstrap,Twitter Bootstrap 2,我在我的页面上使用了许多Twitter引导折叠组。每个组可能包含几个锚: <div class="accordion" id="accordion"> <div class="accordion-group"> <div class="accordion-heading"> <a href="#section1"></a><a class="accordion-toggle" data-toggle="co

我在我的页面上使用了许多Twitter引导折叠组。每个组可能包含几个锚:

<div class="accordion" id="accordion">
    <div class="accordion-group">
        <div class="accordion-heading"> <a href="#section1"></a><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Section 1</a>
        </div>
        <div id="collapseOne" class="accordion-body collapse">
            <div class="accordion-inner">
                <p><a href="#section1-text1"></a>Section 1 - Text 1</p>
                <p><a href="#section1-text2"></a>Section 1 - Text 2</p>
            </div>
        </div>
    </div>
    <div class="accordion-group">
        <div class="accordion-heading"> <a href="#section2"></a><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">Section 2</a>
        </div>
        <div id="collapseTwo" class="accordion-body collapse">
            <div class="accordion-inner">
                <p><a href="#section2-text1"></a>Section 2 - Text 1</p>
                <p><a href="#section2-text2"></a>Section 2 - Text 2</p>
            </div>
        </div>
    </div>
</div> 
但我有两个问题:

  • 如何识别适当的折叠以显示哈希是否不包含名称(例如,锚点和哈希是
    somethingelse-text2
    ,即不包含
    节2
    );如何查找锚点的父级折叠元素somethingelse-text2
  • 折叠显示后是否应手动滚动到锚

  • 对于问题的第一部分,您可以使用以下内容:

    var hash = window.location.hash;
    if(hash){
        var targetAnchor = $(hash + ",a[href='"+hash+"']");
        if(targetAnchor.length > 0){
            targetAnchor.closest(".collapse").collapse('show');
        }   
    }
    
    $('html, body').animate({
        scrollTop: targetAnchor.offset().top
    }, 2000);
    
    对于第二部分,浏览器通常是以本机方式完成的,但在您的例子中,我非常确定这不会发生,因为锚隐藏在您的折叠块中。如果是,您可以手动滚动,如下所示:

    var hash = window.location.hash;
    if(hash){
        var targetAnchor = $(hash + ",a[href='"+hash+"']");
        if(targetAnchor.length > 0){
            targetAnchor.closest(".collapse").collapse('show');
        }   
    }
    
    $('html, body').animate({
        scrollTop: targetAnchor.offset().top
    }, 2000);
    

    基于此

    谢谢,奇米。我唯一的问题是——第一个代码可以很好地处理
    #section1-text1
    等元素,但不能处理
    #collapseOne
    等元素。看起来我应该以某种方式识别
    targetAnchor
    类型(
    class=“accordio toggle”
    ?),或者查找
    parent
    或者将
    collapseOne('show')
    应用到元素本身。我已经用代码更新了答案,以处理
    \collapseOne
    之类的元素。谢谢你的帮助!哎呀,我一会儿又做了同样的事。不客气。不过还有一件事,请记住散列中允许的一些特殊字符可能会破坏jQuery选择器。