【问题标题】:Checkboxes hide groups of rows from a table复选框隐藏表格中的行组
【发布时间】:2013-08-13 22:56:36
【问题描述】:

我有一个表格,我想根据顶部的复选框动态隐藏/显示其中的行。

我想在没有 jQuery 的情况下执行此操作,只需使用原生 Javascript。

我在这个站点和其他站点上看到了许多方法,但总是对代码进行 sn-ps,而不是完整的工作示例。

我不想给每一行一个单独的 div 名称,或者其他什么,我假设有一种方法可以使用一个通用类来为我想要隐藏/显示的 3 种类型的行执行此操作。

谁能给我看一个工作示例,它允许复选框使用 vanilla Javascript 隐藏/显示表格中的多行?

【问题讨论】:

  • 您使用的是什么 HTML?特定复选框如何/应该如何与特定行相关?
  • 正如我在下面回答的示例中,有......比如说.. 200 个团队,其中一些是“北方”团队,其中一些是“南方”团队,其中一些是“外出”团队县”队。无论团队属于哪个组,该列表都按总筹集量降序排列。我希望 3 个复选框能够根据最终用户想要查看的内容添加/删除这些团队组的行。所以他们可以只比较他们所在地区的球队。那种东西。

标签: javascript html checkbox


【解决方案1】:

给定 HTML 如下:

<table>
    <thead>
        <tr>
            <td>
                <label>
                    <input type="checkbox" class="show" value="north" checked />North</label>
            </td>
        </tr>
        <tr>
            <td>
                <label>
                    <input type="checkbox" class="show" value="south" checked />South
                </label>
            </td>
        </tr>
        <tr>
            <td>
                <label>
                    <input type="checkbox" class="show" value="outOfArea" checked />Out of area
                </label>
            </td>
        </tr>
    </thead>
    <tbody>
        <tr class="north">
            <td>North One</td>
        </tr>
        <tr class="north">
            <td>North Two</td>
        </tr>
        <tr class="outOfArea">
            <td>Out-of-area One</td>
        </tr>
        <tr class="south">
            <td>South One</td>
        </tr>
        <tr class="south">
            <td>South Two</td>
        </tr>
        <tr class="north">
            <td>North Three</td>
        </tr>
        <tr class="north">
            <td>North Four</td>
        </tr>
        <tr class="south">
            <td>South Three</td>
        </tr>
        <tr class="outOfArea">
            <td>Out-of-area Two</td>
        </tr>
    </tbody>
</table>

下面的 jQuery 看起来就像你描述的那样似乎

$('thead input[type=checkbox]').change(function(){
    var self = this;
    $(self).closest('table').find('tbody tr').filter('.' + self.value).toggle(self.checked);
});

JS Fiddle demo.

您似乎更喜欢纯 JavaScript 方法,我建议您采用以下方法(使用与上面发布的相同的 HTML):

function toggle (e) {
    var self = e.target,
        toggleClass = '.' + self.value,
        toToggle = document.querySelectorAll(toggleClass);
    for (var i = 0, len = toToggle.length; i < len; i++) {
        toToggle[i].style.display = self.checked ? 'table-row' : 'none';
    }
}

var thead = document.querySelector('thead');
thead.addEventListener('change', toggle);

JS Fiddle demo.

参考资料:

【讨论】:

  • 在 jsfiddle 上看起来很棒,谢谢!我似乎在使用 js 时遗漏了一些东西。我把它放在 .. 但是是什么让它开始的?我做了一些 onload= 但不多。我真的不知道 javascript,但我之前从 web 示例中得到了一些可以很好地工作的东西。
  • 选中/取消选中 input 复选框应该“让它开始”。虽然这假设您使用的是最新的浏览器?它当然可以在 Firefox、Chrome 和 Opera 中运行。我不确定 IE 何时或是否开始实现 addEventListener()。当然,在将事件绑定到 DOM 节点之前,您确实需要存在/构建 DOM,所以我个人会将它包装在 script 标签中(就像你一样)并将 script 标签放在 @987654348 之前@(关闭)标签。
【解决方案2】:

看起来你在描述类似this example 的东西

【讨论】:

  • 如果您至少链接到外部资源,如果您能在答案中总结您链接到的资源,我们将不胜感激。 Stack Overflow 旨在能够独立存在,并在答案/问题中提供有用的答案/代码。链接非常适合链接到其他资源、参考和实际代码演示,但答案应该能够在没有它们的情况下存在(以防止链接腐烂和网站重组)。
  • 我明白你在说什么,不过,他的问题是一个可行的例子。我意识到我可以把这个例子拆开并解释它,也许我应该这样做。
  • 这适用于单个行,但我正在寻找的是它可以控制行组,这些行不会按组排序。例如,筹款活动中的团队列表,我想在其中启用/禁用“北侧”团队、“南侧”团队和“县外”团队的显示。这是一个按总数降序排列的总数页面,因此 South Side 可能想看看他们如何相互对抗,而不是与其他混在其中的团队对抗。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2017-10-17
相关资源
最近更新 更多