javascript - 复选框 筛选按具有多个类的类显示的 div

标签 javascript jquery

我有这个http://jsfiddle.net/RyZy8/221/

JS

$('input[type="checkbox"]').click(function() {
    if ($('input[type="checkbox"]:checked').length > 0) {
        $('#main-div > div > div > div').hide();
        $('input[type="checkbox"]:checked').each(function() {
            $('#main-div > div > div > div[class=' + this.id + ']').show();
        });
    } else {
        $('#main-div > div > div > div').show();

}
});

HTML:

<input type="checkbox" id="one">
<input type="checkbox" id="two">
<input type="checkbox" id="three">

<div id="main-div">
<div>
<div>
<div class="one two other classes">
Content
</div>
</div>
</div>
</div>

<div id="main-div">
<div>
<div>
<div class="one three other classes">
Content
</div>
</div>
</div>
</div>

<div id="main-div">
<div>
<div>
<div class="two three other classes">
Content
</div>
</div>
</div>
</div>

如果使用单个类,则复选框将进行精细过滤,但在存在多个类时则不会。

我如何更改以下内容以允许多个类

$('#main-div > div > div > div[class=' + this.id + ']').show();

最佳答案

您可能不想在此处使用属性选择器,因为它将查找精确的文本。您将需要使用类选择器,它只会查找该类是否存在,而不管是否存在其他类。

$('#main-div > div > div > div.' + this.id).show();

我还建议不要像您一样使用嵌套的直接子选择器 (div > div > div)。这是非常脆弱的,并且会在您更改 HTML 层次结构时破坏,这在重构时会给您带来痛苦。

像这样的东西可能会更好:

$('#main-div .' + this.id).show();

话虽如此,您也永远不想在页面上重复使用 id。 According to Mozilla Developer Network ,id“在文档中必须是唯一的”。如果您想使用 getElementById,它只会返回找到的第一个项目,而不是项目数组。在这种情况下, main-div 可能应该是一个类。

关于javascript - 复选框 筛选按具有多个类的类显示的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867171/

相关文章:

javascript - Rails 3.1 Sprockets 需要指令 - 有没有办法排除特定文件?

javascript - 尝试获取条形图 d3.js 中 y 轴标签旁边的圆圈

javascript - JQuery Ajax 将 html 数据发布到 php 并获得回复

javascript - 获取数据属性并追加优化

javascript - 使用加载文档的路径作为其相对路径的根而不是源文档的路径来加载 HTML

javascript - 如何使 jquery 模态始终位于页面中央?

javascript - yarn 在 Windows 上慢 5 倍

javascript - 访问 jade 循环内的 Controller 变量

javascript - 调用多个元素的分页不起作用,仅调用最后一个元素

javascript - 从表格单元格添加值