RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 613842
Accepted
Adrenal1ne
Adrenal1ne
Asked:2020-01-12 20:52:56 +0000 UTC2020-01-12 20:52:56 +0000 UTC 2020-01-12 20:52:56 +0000 UTC

如何隐藏所有包含空值的表行?

  • 772

下午好!
如何使用复选框隐藏表格的所有行,其中的列仅包含零?

到目前为止,我想到了一个选项,其中所有空行都有一个类< tr class="zero">并随着帮助而js改变style,但同时整个表格浮动 - 单元格变得不同宽度。
最初,我自己创建表,因此可以设置类和样式。

//js файл
function toggle() {
    var rows = document.getElementsByClassName('zero');
    for (var i = 0; i < rows.length; i++) {
        if (this.checked)
            rows[i].style.display = 'block';
        else
            rows[i].style.display = 'none'
    }
}
document.getElementById('chkTest').onchange = toggle;
<input type="checkbox" id="chkTest" />
    <label for="chkTest">Hide all zero rows</label>

    <table>
        <tr class="zero">
            <td>Ivanov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Petrov</td>
            <td>1</td>
            <td>2</td>
            <td>0</td>
            <td>9</td>
            <td>8</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Sidorov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Morozov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Tosterov</td>
            <td>2</td>
            <td>1</td>
            <td>5</td>
            <td>0</td>
            <td>0</td>
            <td>1</td>
        </tr>
    </table>

在网上找到了这个方法。我刚开始学习 JS。

PS 对所有选项都感兴趣,但请强调如何做以及哪些方法工作得更快。
该表是近似值,实际上该表包含数百行。
提前致谢。

javascript
  • 5 5 个回答
  • 10 Views

5 个回答

  • Voted
  1. user207618
    2020-01-12T21:04:35Z2020-01-12T21:04:35Z

    display- CSS 中的 Janus。
    对于trhe table-row,所以你的代码有效,你只需要display正确设置它:

    //js файл
    function toggle() {
      Array.from(document.querySelectorAll('.zero')).forEach(e => {
        e.style.display = this.checked ? 'none' : 'table-row';
      });
    }
    document.getElementById('chkTest').onchange = toggle;
    <input type="checkbox" id="chkTest" />
        <label for="chkTest">Hide all zero rows</label>
    
        <table>
            <tr class="zero">
                <td>Ivanov</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <tr>
                <td>Petrov</td>
                <td>1</td>
                <td>2</td>
                <td>0</td>
                <td>9</td>
                <td>8</td>
                <td>0</td>
            </tr>
            <tr class="zero">
                <td>Sidorov</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <tr class="zero">
                <td>Morozov</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <tr>
                <td>Tosterov</td>
                <td>2</td>
                <td>1</td>
                <td>5</td>
                <td>0</td>
                <td>0</td>
                <td>1</td>
            </tr>
        </table>

    • 3
  2. Best Answer
    Grundy
    2020-01-12T21:11:25Z2020-01-12T21:11:25Z

    问题中的实现是浮动的,因为你正在做

    rows[i].style.display = 'block'; 
    

    应设置表行display: table-row;


    作为在循环中遍历所需行并手动设置可见性的替代方法,您可以为容器(例如表)设置一个类,并在 css 中指定此类中类为零的元素将具有display:none.

    在这种情况下,可见性控制是通过向容器添加/删除类来控制的

    例子:

    //js файл
    function toggle() {
      document.querySelector('table').classList.toggle('hide-zero');
    }
    document.getElementById('chkTest').onchange = toggle;
    .hide-zero .zero {
      display: none;
    }
    <input type="checkbox" id="chkTest" />
    <label for="chkTest">Hide all zero rows</label>
    
    <table>
      <tr class="zero">
        <td>Ivanov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr>
        <td>Petrov</td>
        <td>1</td>
        <td>2</td>
        <td>0</td>
        <td>9</td>
        <td>8</td>
        <td>0</td>
      </tr>
      <tr class="zero">
        <td>Sidorov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr class="zero">
        <td>Morozov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr>
        <td>Tosterov</td>
        <td>2</td>
        <td>1</td>
        <td>5</td>
        <td>0</td>
        <td>0</td>
        <td>1</td>
      </tr>
    </table>

    • 3
  3. Yuri
    2020-01-12T21:04:42Z2020-01-12T21:04:42Z

    无论浮动什么,您都可以display更改visibility:

    function toggle() {
        var rows = document.getElementsByClassName('zero');
        for (var i = 0; i < rows.length; i++) {
            if (this.checked)
                rows[i].style.visibility = 'hidden';
            else
                rows[i].style.visibility = 'visible'
        }
    }
    document.getElementById('chkTest').onchange = toggle;
    <input type="checkbox" id="chkTest" />
    <label for="chkTest">Hide all zero rows</label>
    
    <table>
        <tr class="zero">
            <td>Ivanov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Petrov</td>
            <td>1</td>
            <td>2</td>
            <td>0</td>
            <td>9</td>
            <td>8</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Sidorov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Morozov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Tosterov</td>
            <td>2</td>
            <td>1</td>
            <td>5</td>
            <td>0</td>
            <td>0</td>
            <td>1</td>
        </tr>
    </table>

    • 0
  4. SLy_huh
    2020-01-12T21:16:39Z2020-01-12T21:16:39Z

    $('#chkTest').on('change', function(){ //На событие изменения чекера вешаем функцию
      toggleZeroes();
    })
    function toggleZeroes(){
      var target = 'table'; //целевая таблица, в нашем случае, просто любая
      if(!$('#chkTest').prop('checked')){ //проверяем состояние чекера
        $(target).find('tr').show();//если он СТАЛ ВЫКЛЮЧЕН то показываем все строки
        return false; //выходим из ф-ции
      }
    $(target).find('tr').each(function() {//Иначе - по каждой строке проходимся
      var total = 0;
      $(this).find('td').each(function() {// И считаем сумму всех ячеек этой строки
        var val = $(this).text()*1; //получаем значение ячейки, "*1" - необходимо, чтобы строго привести значение к числовому
        total += !isNaN(val) ? val : 0; //Если вдруг, ячейка содержит в себе значения, не переводящиеся в число, просто прибавляем к ней 0
      })
      if (total == 0) { //Если в строке сумма элементов - 0, прячем строку
        $(this).hide();
      }
    })
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="checkbox" id="chkTest" />
    <label for="chkTest">Hide all zero rows</label>
    
    <table>
      <tr class="zero">
        <td>Ivanov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr>
        <td>Petrov</td>
        <td>1</td>
        <td>2</td>
        <td>0</td>
        <td>9</td>
        <td>8</td>
        <td>0</td>
      </tr>
      <tr class="zero">
        <td>Sidorov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr class="zero">
        <td>Morozov</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
        <td>0</td>
      </tr>
      <tr>
        <td>Tosterov</td>
        <td>2</td>
        <td>1</td>
        <td>5</td>
        <td>0</td>
        <td>0</td>
        <td>1</td>
      </tr>
    </table>

    有点拐杖,但工作。

    • 0
  5. Александр Цикура
    2022-09-06T06:58:38Z2022-09-06T06:58:38Z

    function toggle() {
        var rows = document.getElementsByClassName('zero');
        for (var i = 0; i < rows.length; i++) {
            if (this.checked)
                rows[i].style.visibility = 'hidden';
            else
                rows[i].style.visibility = 'visible'
        }
    }
    document.getElementById('chkTest').onchange = toggle;
    <input type="checkbox" id="chkTest" />
    <label for="chkTest">Hide all zero rows</label>
    
    <table>
        <tr class="zero">
            <td>Ivanov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Petrov</td>
            <td>1</td>
            <td>2</td>
            <td>0</td>
            <td>9</td>
            <td>8</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Sidorov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr class="zero">
            <td>Morozov</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
            <td>0</td>
        </tr>
        <tr>
            <td>Tosterov</td>
            <td>2</td>
            <td>1</td>
            <td>5</td>
            <td>0</td>
            <td>0</td>
            <td>1</td>
        </tr>
    </table>

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5