1

基本上我有这个问题。我有一个手风琴,一次打开一个标题,我在添加标题右侧的打开/关闭图像时遇到问题。

到目前为止,我已经有了它,因此一旦您单击标题,它就会删除“打开”图像并为“关闭”图像切换另一个类。现在我基本上需要再次换掉这些类,以便如果您切换另一个标题,它会删除另一个图像并返回到原始图像。

这是我正在使用的代码。

JavaScript

<SCRIPT>
    $("#accordion > li").click(function () {
        $("#accordian li").removeClass("faq-header");
        $(this).addClass("faq-header2");
        if (false == $(this).next().is(':visible')) {
            $('#accordion > ul').slideUp(250);
            $('#accordion > ul').addClass('faq-header');
            $(this).removeClass("faq-header");
        }
        $(this).next().slideToggle(300);
    });

    $('#accordion > ul:eq(0)').show();
</SCRIPT>

CSS

#accordion {
    list-style: none;
    margin-left:-38px;
}
#accordion ul:eq {
    background-image:url(../img/faq-open.gif);
    background-repeat:no-repeat;
    background-position:right;
    padding-right:20px;
}
#accordion li{
    display: block;
    background-color: #FFF;
    font-weight: bold;
    cursor: pointer;
}
.faq-header {
    text-align:left;
    background-image:url(../img/faq-close.gif);
    background-repeat:no-repeat;
    background-position:right;
    margin-right:20px;
}
.faq-header2 {
    text-align:left;
    background-image:url(../img/faq-open.gif);
    background-repeat:no-repeat;
    background-position:right;
    margin-right:20px;
}
#accordion ul {
    list-style: none;
    display: none;
}
#accordion ul li{
    font-weight: normal;
    cursor: auto;
    background-color: #fff;
    border-bottom:1px solid #999;
    margin-left:-38px !important;
}

如您所见,我删除了一个课程并添加了另一个课程,$("#accordian li").removeClass("faq-header");并添加了以下内容$(this).addClass("faq-header2");

但是我现在需要在它不再是选定的部分后删除.faq-header2并重新添加。.faq-header这对我来说似乎并不难,但我只是不知道如何编码。应该是我认为的基本 if 功能......

4

2 回答 2

4

jQuery UI 手风琴是一个久经考验的跨浏览器小部件,可以打开和关闭图像(默认情况下在左侧,但更改 CSS 会将它们放在右侧)

按照这里

如果你不想使用它,我会用 toggleClass 来选择一个选项,在这里

编辑

感谢您发布您的 HTML,我并不一定是指整个页面,只是为您提供手风琴功能的 HTML,但嘿,那很酷

不过,第一点,你的 HTML 似乎有点重,只是做手风琴。将 ul 放在 ul 中也不完全有效(它们倾向于放在 li 中,如下拉菜单样式)。此外,在所有这些 ul 和 li 中似乎没有多大意义,因为每个 ul 反正只有一个 li,看起来标签比你真正需要的要多得多。ul 和 li 往往带有很多默认样式(项目符号点、边距、填充、缩进等),这可能意味着需要更多的 CSS 来让它们显示你想要的方式。我会选择一个更简单的结构,让你更容易编写你的 jQuery。有点像这样

<div id="accordion">
    <h3>First header</h3>
    <div>First content</div>
    <h3>Second header</h3>
    <div>Second content</div>
</div>

无论如何,这只是我的经验的评论。对于您手头的问题,这对我有用

    $("#accordion > li").click(function () {              
            var self = $(this);
            self.next('ul').slideToggle(300, function () {
                if ($(this).is(':visible')) {
                    self.removeClass('faq-header').addClass('faq-header2')
                }
                else {
                    self.removeClass('faq-header2').addClass('faq-header')
                }
            });
            self.siblings().removeClass('faq-header2').addClass('faq-header').next('ul').slideUp(250);
        });

toggleClass,虽然有用,但在您希望如何添加和删除类的情况下,可能没有我想象的那么有用

于 2012-07-10T04:16:04.317 回答
0

我认为该toggle()功能有点不直观。我通常使用我的 pwn 方法 replaceClass() 来做你想做的事:

void replaceClass(Object classList, String surrogateClass, String classToReplace);

定义如下

function replaceClass(elementClassList, firstClass, secondClass) {
 if(elementClassList.contains(firstClass)){
 {
  elementClassList.remove(firstClass);
elementClassList.add(secondClass);
}
}
于 2020-02-14T23:02:34.797 回答