[英]Can't select HTML element with Javascript
<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>
在html表格中选择内容时,您可以利用表格的特殊rows
属性和每一行的相似cells
属性,
这是您函数的更新版本(添加了id
参数):
function select(x, y, id) { var matrix = document.getElementById(id) var row = matrix.rows[x]; var box = row.cells[y]; return box; } var test = select(0, 1, 'table_x').style.color = 'red';
<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>
DOM元素可以同时包含元素节点和文本节点。
table_x
的第一个子节点是空白文本节点, 而不是 TBODY元素。
要跳过文本节点,只有元素节点的工作,用children
来代替childNodes
。
function select(x, y) {
row = matrix.children[x];
box = row.children[y];
return box;
}
代替使用childNodes
使用表专用的rows
和cells
。 您还可以使函数变小/变快,将row
和box
变量合并到返回中。
var matrix = document.getElementById("table_x"); function select(x,y){ return matrix.rows[x].cells[y]; } var test = select(0,1); console.log(test);
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.