【问题标题】:JavaScript hasClass ignoring element's class?JavaScript hasClass 忽略元素的类?
【发布时间】:2012-11-22 18:48:27
【问题描述】:

我有一个Isotope 过滤器菜单,并且我正在使用哈希历史记录,因此如果用户返回该页面,过滤器仍会设置。因为我们使用 .slideDown 来展开子菜单项,所以当您返回页面时,即使选择了其中的某些过滤器,子菜单项也会被隐藏。

我正在尝试使用:

if ($('#option1').hasClass('.selected')) {
    $('.level-two').slideDown('fast');
}

但是,由于“selected”类是由 jQuery 过滤器(同位素)生成的,所以它被忽略了。

小提琴:http://jsfiddle.net/RevConcept/swT84/

HTML:

<nav>           

            <div id="options" class="combo-filters">

                <div class="option-combo location">

                    <ul class="filter option-set group level-one" data-filter-group="location"> 

                        <li class="hidden"><a href="#filter-location-any" data-filter-value="" class="selected">any</a></li>

                        <li><a id="option1" href="#filter-location-exterior" data-filter-value=".exterior" class="trigger-two">exterior</a></li>

                        <li><a id="option2" href="#filter-location-interior" data-filter-value=".interior" class="trigger-two">interior</a></li>

                    </ul>

                </div>

                <div class="option-combo illumination">

                    <ul class="filter option-set group level-two" data-filter-group="illumination"> 

                        <li class="hidden"><a href="#filter-illumination-any" data-filter-value="" class="selected">any</a></li>

                        <li><a href="#filter-illumination-illuminated" data-filter-value=".illuminated" class="trigger-three">illuminated</a></li>

                        <li><a href="#filter-illumination-non-illuminated" data-filter-value=".non-illuminated" class="trigger-three">non-illuminated</a></li>

                    </ul>

                </div>

                <div class="option-combo mount">

                    <ul class="filter option-set group level-three" data-filter-group="mount"> 

                        <li class="hidden"><a href="#filter-mount-any" data-filter-value="" class="selected">any</a></li>

                        <li><a href="#filter-mount-wall" data-filter-value=".wall">wall</a></li>

                        <li><a href="#filter-mount-ground" data-filter-value=".ground">ground</a></li>

                    </ul>

                </div>


            </div><!--end options-->

        </nav>

CSS:

header nav ul.level-two, header nav ul.level-three {
display:none;
}

JavaScript:

$(function(){
    $('.level-one').hide().fadeIn('fast');
});


$(".trigger-two").one('click', function(){
    $(".level-two").slideDown('fast'); 
});


$(".trigger-three").one('click', function(){
    $(".level-three").slideDown('fast'); 
});


if ($('#option1').is('selected')) {
    $('.level-two').slideDown('fast');
}

【问题讨论】:

    标签: javascript jquery filter jquery-isotope slidedown


    【解决方案1】:

    我猜你错过了一个'。'

    if ($('#option1').is('.selected')) {
        $('.level-two').slideDown('fast');
    }
    

    【讨论】:

    • 是的,谢谢……但添加它并不能解决问题。如果我在元素上创建自己的类并使用它,那么它就可以工作......它只是动态“选定”类有问题。
    • 你是如何设置课程的。是否使用 addClass()
    • 我没有直接这样做,它内置在同位素选项中......但是是的,他们似乎正在使用 addClass/removeClass 等。如果你去我的fiddle 你会看到“ ISOTOPE SETTINGS”朝向 javascript 区域的底部。
    【解决方案2】:

    您可以始终以编程方式触发对 .selected 锚点的点击,而不是使用重复函数复制每次点击的相同过程。

    $('.option-combo a.selected').trigger('click');
    

    小提琴:http://jsfiddle.net/jgkwd/

    【讨论】:

    • 这在小提琴上工作得很好......但由于某种原因,当我回到我的开发网站上的页面时,子菜单选项再次被隐藏:example
    • 我可能是错的,但这可能是因为您的页面中包含 javascript 文件的顺序。添加 .selected 类的脚本是在切换脚本之后添加的,因此 $(document).ready(function())$(function())(据我所知是相同的)正在排队,然后以错误的顺序调用。
    • 我试过了,但没有帮助,但我认为当时我遇到了其他问题......你是对的!谢谢一百万;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2012-04-12
    • 1970-01-01
    相关资源
    最近更新 更多