当前位置: 首页 > 知识库问答 >
问题:

如何通过复选框选中属性对表进行排序

牧献
2023-03-14

我是javascript新手,我有一个问题暂时无法解决……我需要对表进行动态排序。(借用)代码为:

function sortTable(n) {
      var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
      table = document.getElementById("myTable2");
      switching = true;
      dir = "asc"; 

      while (switching) {

        switching = false;
        rows = table.getElementsByTagName("TR");
        for (i = 1; i < (rows.length - 1); i++) {
          shouldSwitch = false;
          x = rows[i].getElementsByTagName("TD")[n];
          y = rows[i + 1].getElementsByTagName("TD")[n];

          if (dir == "asc") {
            if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
              shouldSwitch= true;
              break;
            }
          } else if (dir == "desc") {
            if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
              shouldSwitch= true;
              break;
            }
          }
        }
        if (shouldSwitch) {
          rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
          switching = true;
          switchcount ++; 
        } else {
          if (switchcount == 0 && dir == "asc") {
            dir = "desc";
            switching = true;
          }
        }
      }
    }

它适用于文本/数字值,但问题是表中的一列由复选框组成。这个想法是按照带有选中复选框的行在顶部的方式对表格进行排序(/底部,取决于升序/降序方向)。

我试图检查< code > x . innerhtml . checked = = true ,但是< code>x.innerHTML.checked返回“undefined”,所以这样做没有用。

有什么建议吗?

共有2个答案

公孙阳羽
2023-03-14

如果 x 是复选框类型 DOM 元素,则只需执行 x.checked 即可访问复选框的布尔值。

例如:

document.getElementById('mycheckbox').checked;
// will return true or false
html prettyprint-override"><input id="mycheckbox" type="checkbox">
江天宇
2023-03-14

使用纯原生javascript,for循环应该如下所示:

for (i = 1; i < (rows.length - 1); i++) {
    shouldSwitch = false;
    x = rows[i].getElementsByTagName("TD")[n];
    y = rows[i + 1].getElementsByTagName("TD")[n];

    if (dir == "asc") {
        if(x.querySelector("input[type=checkbox]") !== null) { // checkbox case
            shouldSwitch = (x.querySelector("input[type=checkbox]").checked > y.querySelector("input[type=checkbox]").checked);
        } else {
            shouldSwitch= x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase();
        }

    } else if (dir == "desc") {
        if(x.querySelector("input[type=checkbox]") !== null) {
            shouldSwitch = (x.querySelector("input[type=checkbox]").checked < y.querySelector("input[type=checkbox]").checked);
        } else {
            shouldSwitch= x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase();
        }

    }
    if (shouldSwitch) {
        break;
    }
}

使用x.querySelector("输入[类型=复选框]"),您将在您之前选择的TD元素中查找一个复选框,并且您已将其放入变量x中。

X是一个节点对象,是网页DOM的元素。

QuerySelector返回一个节点对象而不是返回简单文本的innerHTML。在简单的文本中,您无法轻松验证您的复选框是否被选中。

 类似资料:
  • 问题内容: 和骗局。如何按升序排序,然后按?有人可以帮忙吗?我知道在中具有通用算法和重载运算符,但是我是Java新手。 问题答案: 使实现或在单独的类中实现。然后致电: 要么 通常,如果有一个单一的“自然”排序顺序,则实施是个好主意…否则(如果你碰巧想要按特定顺序进行排序,但可能同样容易地希望使用另一个顺序),则最好实现。老实说,这种特殊情况可能会发生任何一种……但是我可能会坚持使用更灵活的选择。

  • 问题内容: 我正在Java中使用Selenium来测试Webapp中复选框的检查。这是代码: 我声明并将其分配给复选框所在的区域。 奇怪的是回报,因此 在复选框的HTML中,没有显示属性。但是,不是所有元素都有一个,这样的代码就可以工作吗? 问题答案: 如果您使用的是Webdriver,则正在寻找的项目已选中。 除非指定,否则通常在复选框呈现中实际上不会应用选中的属性。 所以您在Selenium

  • 问题内容: 好吧,标题说明了一切。我正在做的是创建一个特色产品模块。使用JSON填充尺寸的下拉列表,并且我使用把手来呈现html。我无法控制JSON文件。我尝试通过选项标签中的实际文本对选项值进行排序,但后来我意识到选项值是错误的。因此,现在我尝试按其值属性对选项进行排序,但尚未弄清楚。我正在尝试做这样的事情: 这是HTML: 问题答案: 在这里,您可以找到一个演示并将结果与​​原始结果进行比较:

  • 免责声明:我已经发布过这样一个问题,它被标记为重复。请帮帮我。我已经看过了stackoverflow之前的所有方法,但都没有任何帮助。在我的例子中,提到的所有对Map(Key,Values)进行排序的方法都不起作用,因为我还有一个步骤,即检索值的属性。这一次,我试着详细讲述。 我有一个地图(字符串,对象)在Java,我想排序它使用对象的属性之一。 假设我有一堂课 现在,我创建了一张地图 我想通过类

  • 问题内容: 我有一个对象,有时我需要添加其他对象。 我想在此之后进行排序。我不想获取所有键和值,将它们与之排序,然后将其全部放入一个新对象。有没有更好的办法? 问题答案: 不,扩展不能为键或值定义可预测的排序顺序。 您可以尝试将所有值转储到诸如之类的东西中,这将对键施加自然排序。

  • 我有一个对象,有时需要向其添加其他。 我想在此之后对进行排序。我不想获取所有键和值,用对它们进行排序,然后将它们全部放入一个新对象。有更好的办法吗?