help页面问答的展开收起及toggle(fn,fn)的替代方法

最近项目网站里需要一个新手帮助问答页面。
首先页面框架让我费了一点脑子,用了一个类似选项卡的li和ul布局,用css伪类实现切换。不过构思好了之后,用HTML和CSS实现起来难倒是不难,就是细节需要调整很久。
利用jQuery应该也能从另一方面实现选项卡效果,下次试试。

关于问答的展开和收起,经历了几个优化的过程。
常见问题选项卡是这样:

问题

DOM是这样的:

 <div class="common">
                <em></em>
                <h2>常见问题</h2>

                <ul class="trademarkQ">
                    <h3>商标问题</h3>
                    <li>申请商标需要提交哪些材料?</li>
                    <p>⑴商标注册委托书、申请书用于代理机构商标注册业务,商标注册委托书,申请书可在网站自动生成。<br/>
                       ⑵申请人资格证明资料:<br/>
                       a.以公司名义申请,附企业营业执照复印件;<br/>
                       b.以个体名义申请,附身份证或者护照复印件及个体营业执照。<br/>
                       ⑶商标图样:<br/>
                       商标图样(JPG格式,400*400-1000*1000大小)。<br/>
                        <!--![](/statics/img/footer-icon.png)-->
                    </p>
                    <li>复审材料需要哪些?</li>
                    <p>
                       ......
                    </p>
                    <li>如果我是以个人名义申请,现在能不能变更为公司呢?</li>
                    <p>
                       ......
                    </p>
                    <li>为什么要进行商标驳回复审?</li>
                    <p>
                      ......
                    </p>
                    <li>为什么要进行商标续展?</li>
                    <p>
                        ......
                    </p>
                </ul>


                <ul class="copyrightQ">
                    <h3>版权问题</h3>
                    <li>美术作品著作权登记需要哪些文件?</li>
                    <p>
                        ......
                    </p>
                    <li>文字作品版权登记需要哪些材料?</li>
                    ......

最先开始写的效果是,单击问题,收起其他版块问题的ul,并展开对应li后面紧接的p。


效果一

代码如下:

    $(".common li").click(function(){
        $(this).next("p").slideToggle();
        $(this).parent().siblings("ul").slideToggle();
    }

注意,这时同一版块中的其余问题都还保留着,于是就遇到了问题:在同一版块中,问题1的答案展开的情况下单击问题2,其他版块问题ul滑动展开,从此整个节奏都乱了,233。

于是,我想的第一个解决办法是,单击时获取所有答案p的开合状态,将多余的关闭。不过节奏还是乱,因为单击一次ul就会slideToggle滑动切换开合状态。

      if($(this).next("p").css("display") == "block"){
                    $(this).next("p").siblings("p").hide();
                    if($(this).parent().siblings("ul").css("display")=="block"){
                    $(this).parent().siblings("ul").slideUp();
                    }
      }

划重点:


然后我得出了一个浅显易懂的结论,有点像数学证明题的“显然,...”,哈哈哈:不要轻易用toggle,它比较适合两种明确对立状态下的切换。


然后我就想 可不可以把情况限定成两种。显示一个问题答案的时候,把其他问题都隐藏,这样就必须关闭这个问题,回到初始状态,才能继续查看其他问题呗,这么简单。

效果二

(不过我现在还是觉得这样显示得没有效果一好看)

 $(this).nextAll("li").slideToggle();
 $(this).prevAll("li").slideToggle();

然后效果二里面,由于隐藏了版块中其他问题,这个问题的序号变成了一。我又不死心地用了toggle。
用toggle(fn,fn)切换li的样式:

 $(this).toggle(function(){
                 $(this).css("list-style-type","disc")
                 },function(){
                 $(this).css("list-style-type","decimal")
                 });

后来以失败告终,原因是toggle(fn,fn)函数在jQuery1.9以后被取消,悲痛/(ㄒoㄒ)/~~
jquery 1.9里面已经删除了toggle(fn1, fn2)函数:
Note: This method signature was deprecated in jQuery 1.8 and removed in jQuery 1.9. jQuery also provides an animation method named .toggle() that toggles the visibility of elements. Whether the animation or the event method is fired depends on the set of arguments passed.

项目中用的是1.9.1的jQuery,不能采用调用1.8.3的方式(据说这个版本比较稳定,这是题外话)。

那么我用flag方法替代吧:

 //单击常见问题显示对应答案csj20170410
        $(document).ready(function(){

            var flag=0;
            $(".common li").click(function(){
                if(flag==0){
                    $(this).next("p").slideDown();//展开对应的答案<p>
                    $(this).parent().siblings("ul").slideUp();//展开父级<ul>
                    $(this).siblings("li").slideUp();//收起this同级<li> 
                    $(this).css("list-style-type","disc");
                    flag=1;
                }else{
                    $(this).next("p").slideUp();
                    $(this).parent().siblings("ul").slideDown();
                    $(this).siblings("li").slideDown(); 
                    $(this).css("list-style-type","decimal");
                    flag=0;
                }
            });
     });

或者

 $(document).ready(function(){
            $(this).next("p").slideToggle();//切换对应的答案<p>开合状态
            $(this).parent().siblings("ul").slideToggle();//切换父级<ul>开合状态
            $(this).siblings("li").slideToggle();//切换this同级<li>开合状态

            var flag=0;
            $(".common li").click(function(){
                if(flag==0){
                    $(this).css("list-style-type","disc");
                    flag=1;
                }else{
                    $(this).css("list-style-type","decimal");
                    flag=0;
                }
            });
     });
效果三

最后就是这样了。

help.gif

后来在网上查,toggle(fn,fn)还有一种替代方法,外接函数,例如

toggle(objs) {
    $(objs).each(function(){
        if ($(this).is(':hidden')) $(this).show(); else $(this).hide();
    });
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,634评论 18 503
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,097评论 2 19
  • 选择器选择器是jQuery的核心。 事件 动画 扩展
    wyude阅读 468评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,157评论 0 1
  • 每天一鼓励 第6天 给贝 宝贝,妈妈今天观察到你自己能分辨出两种不同的积木,这是你学会观察和比较的结果。妈妈...
    艺凌老师阅读 198评论 0 1