1

我一直试图让这个箭头切换脚本在我的页面上工作。我想我想念一些简单的东西,但我只是不知道它是什么。花了2个小时来解决这个问题。

剧本 :

$(document).ready(function(){

    $(".accordion h3:first").addClass("active");
    $(".accordion a:first").addClass("active");
    $(".accordion p:not(:first)").hide();

    $(".accordion h3").click(function() 
    {
        $(this).next("p").slideDown("slow")
               .siblings("p:visible").slideUp("slow");
    });

    $(".accordion a").click(function() 
    {
        $(this).css({background:"url(images/arrowdown.gif) bottom right no-repeat"});
        $(this).siblings("a").removeClass("active");
    });  
});

CSS:

.accordion h3 a {
    padding:20px 0 0 190px; 
    display:block;  
    background:url(images/arrowup.gif) no-repeat bottom right; }

.accordion h3 a:hover { text-decoration:none;   }

.accordion h3 a.active {
    background:url(images/arrowdown.gif) no-repeat bottom right; }

然后我的HTML:

<div class="accordion">
    <h3 id="tab1">
        <a href="#">Title 1</a>
    </h3>
    <p>Description Title 1</p>
    <h3 id="tab2">
        <a href="#">Title 2</a>
    </h3>
    <p>Description Title 2</p>
    <h3 id="tab3">
        <a href="#">Title 3</a>
    </h3>
    <p>Description Title 3</p>
</div>

所以上下箭头在“a href”标签内,H3标签中有不同的背景图片取决于“标签”ID。我希望这是有道理的。

先感谢您!!

4

2 回答 2

2

脚本中有两个错误:

  1. 每个<a>元素都是唯一的子<h3>元素。没有其他<a>兄弟姐妹。你想要的是<a>在手风琴的标题中找到所有其他元素:

    $(this).closest('.accordion').find('h3 a').removeClass("active");
    
  2. 在元素 ( $(this).css(...);) 上设置样式将覆盖任何其他样式定义。稍后通过更改类(在这种情况下,删除类active)对背景的更改不会有任何效果[demo]。因此,您应该设置active类,而不是直接设置样式:

    $(this).addClass('active');
    

工作演示


更新:h3您还可以通过将所有内容放入click 事件处理程序甚至添加active类来简化整个代码。

JavaScript:

$(".accordion h3").click(function() {

    $(this).siblings().removeClass("active");
    $(this).addClass('active');

    $(this).next("p").slideDown("slow")
           .siblings("p:visible").slideUp("slow");

});

CSS(更改部分):

.accordion h3.active a {
    background:red; 
}

演示 2

于 2011-07-12T23:45:41.283 回答
2

问题是siblings适用于同一父级下的元素。您的a链接不在同一个父级下,因为每个链接都包含在h3.

所以我相信这就是你想要的

$(document).ready(function(){

    $(".accordion h3:first").addClass("active");
    $(".accordion a:first").addClass("active");
    $(".accordion p:not(:first)").hide();

    $(".accordion h3").click(function() {
        $(this)
            .addClass('active') //set the current as active
            .siblings("h3") //find sibling h3 elements
            .removeClass("active") // and remove the active from them
            .end() // return selection to the current element
            .next("p") // find the next p
            .slideDown("slow") // and show it
            .siblings("p:visible") // find the other visible p elements
            .slideUp("slow"); // and hide them

        $(this)
            .find('a') // find a under current element
            .addClass('active') // and add active class
            .end() // return to current element
            .siblings('h3') // find sibling h3 elements
            .find('a') // find their a elements
            .removeClass('active'); // and remove the active
    });

});

Demo at http://jsfiddle.net/gaby/NSvQB/

于 2011-07-12T23:48:37.943 回答