javascript - 无法使用 Javascript 选择 HTML 元素

标签 javascript html dom child-nodes

     <body>
    <table id="table_x">
        <tbody>
            <tr>
                <td></td>                         
                <td>this box should be selected</td>
                <td></td>
                <td></td>
           </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </tbody>
     </table>
  </body>

通过以下 JavaScript 代码,我想选择表格第一行中 ID 为“table_x”的第二个“框”:

        var matrix = document.querySelector("#table_x");
        var row;
        var box;

        function select(x,y){
            row = matrix.childNodes[x];
            box = row.childNodes[y];
            return box;
        }

        var test = select(0,1);

但是,当我想在控制台中输出元素时(使用命令console.log(test);),我只是返回“未定义”。我选择的 html 元素有什么问题吗?

最佳答案

我假设您正在尝试获取行x,然后从中获取单元格y。 (我使用 y 表示行,使用 x 表示单元格,但您的代码似乎做了相反的操作。)

如果是这样,你就不想使用childNodes,因为它不仅包括元素,还包括注释节点、文本节点等。

另外,您需要确保 matrix 引用 tbody 元素,而不是 table 元素。

然后你可以使用其中任何一个;请注意,其中之一甚至不需要 matrix 变量:

function select1(x, y) {
  return matrix.children[x].children[y];
}

function select2(x, y) {
  return matrix.rows[x].cells[y];
}

function select3(x, y) {
  var selector = "#table_x tr:nth-child(" + (x + 1) + ") > td:nth-child(" + (y + 1) + ")";
  return document.querySelector(selector);
}

所有三个示例:

var matrix = document.querySelector("#table_x tbody");

function select1(x, y) {
  return matrix.children[x].children[y];
}

function select2(x, y) {
  return matrix.rows[x].cells[y];
}

function select3(x, y) {
  var selector = "#table_x tr:nth-child(" + (x + 1) + ") > td:nth-child(" + (y + 1) + ")";
  return document.querySelector(selector);
}

select1(0, 0).style.color = "blue";
select2(1, 1).style.color = "green";
select3(2, 2).style.color = "red";
<table id="table_x">
  <tbody>
    <tr>
      <td>x</td>
      <td>x</td>
      <td>x</td>
      <td>x</td>
    </tr>
    <tr>
      <td>x</td>
      <td>x</td>
      <td>x</td>
      <td>x</td>
    </tr>
    <tr>
      <td>x</td>
      <td>x</td>
      <td>x</td>
      <td>x</td>
    </tr>
    <tr>
      <td>x</td>
      <td>x</td>
      <td>x</td>
      <td>x</td>
    </tr>
  </tbody>
</table>

关于javascript - 无法使用 Javascript 选择 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684214/

相关文章:

javascript - 编辑 :before from Javascript 的 CSS 内容

javascript - Ractive 绑定(bind)到父级

html - 如何提示 Google Smart Lock 使用特定输入字段作为网站中的用户名

javascript - 无法创建存储 td、tr 或 th 的 DocumentFragment?

Javascript:动态创建引用实例化对象的 html 元素

javascript - IE9 createElement 并设置 innerHTML 在设置操作中删除标签?

javascript - Meteor Collections 以及何时使用模式

javascript - 并行同时加载?

快速输入字符时的 Javascript 击键陷阱

html - 列不会与 Rails 中的行中间对齐