jQuery - 在父元素内计算具有特定类的元素

时间:2011-04-30 14:37:11

标签: jquery class foreach

我有这个HTML结构:

<form>
    <input class="myTrigger" type="radio" value="1"/>
    <input class="myTrigger" type="radio" value="2"/>
    <fieldset>
        <ul class="class1">
            <li></li>
        </ul>
        <ul class="class2">
            <li></li>
        </ul>
    </fieldset>
    <fieldset>
        <ul class="class2">
            <li></li>
        </ul>
        <ul class="class2">
            <li></li>
        </ul>
    </fieldset>
</form>

使用jQuery,我需要浏览每个ul并隐藏那些没有myClass 的内容checked {{1} } radio然后我需要检查现在为空的.myTrigger(即:fieldset,其中没有ul有类fieldsets)< / em>并完全隐藏它们。

到目前为止,我能够隐藏所需的myClass,但不能隐藏ul。这就是我得到的:

fieldsets

此外,我在同一页面上有其他脚本切换相同的ul function myFunction() { var myClass = "class"+($("radio:checked").attr("value")); var productGroup = $("form ul"); $("form fieldset").each(function(index){ groupCheck = 0; $.each(productGroup, function(index, obj){ if($(obj).hasClass(myClass)) { groupCheck += 1; $(obj).show(); } else { $(obj).hide(); }; }) if (groupCheck == 0) { $(this).hide(); } else { $(this).show(); }; }); }; myFunction(); $(".myTrigger").change(myFunction); ex: 因此无法隐藏已经隐藏的(legend).click(function(){$(this).siblings("ul").toggle();});隐藏的字段集。相反,我需要寻找或不存在的类(“myClass”)。

(即:当小脚本为了方便用户而搜索ul时,“myFunction”需要根据“myTrigger”选择过滤ul和字段集。)

1 个答案:

答案 0 :(得分:2)

不需要循环;只需使用适当的选择器定位您想要显示/隐藏的内容:

var myClass = 'class' + $('radio:checked:first').attr('value');

// Hide all the <ul>s
$('ul.' + myClass).hide();

// First, show all the fieldsets, in case any were hidden earlier
$('fieldset').show(); 

// Now hide the ones that don't have any visible <ul>s inside
$('fieldset:not(:has(ul:visible))').hide();