有没有更短的方式在JavaScript中编写它?
var data = [];
var table = document.getElementById( 'address' );
var rows = table.getElementsByTagName( 'tr' );
for ( var x = 0; x < rows.length; x++ ) {
var td = rows[x].getElementsByTagName( 'td' );
for ( var y = 0; y < td.length; y++ ) {
var input = td[y].getElementsByTagName( 'input' );
for ( var z = 0; z < input.length; z++ ) {
data.push( input[z].id );
}
}
}
答案 0 :(得分:8)
element.getElementsByTagName
找到所有后代,而不仅仅是孩子,所以:
<script type="text/javascript>
var data = [];
var table = document.getElementById( 'address' );
var input = table.getElementsByTagName( 'input' );
for ( var z = 0; z < input.length; z++ ) {
data.push( input[z].id );
}
</script>
答案 1 :(得分:2)
是的。
var data = [],
inputs = document.getElementById('address').getElementsByTagName('input');
for (var z=0; z < inputs.length; z++)
data.push(inputs[z].id);
注意,即使在包含三个循环的较长版本中,您也可以说:
var rows = table.rows;
// instead of
var rows = table.getElementsByTagName('tr');
// and, noting that it returns <th> cells as well as <td> cells,
// which in many cases doesn't matter:
var tds = rows[x].cells;
// instead of
var tds = rows[x].getElementsByTagName('td');
答案 2 :(得分:1)
适用于现代浏览器:)
var table, inputs, arr;
table = document.getElementById( 'test' );
inputs = table.querySelectorAll( 'input' );
arr = [].slice.call( inputs ).map(function ( node ) { return node.id; });
现场演示: http://jsfiddle.net/HHaGg/
因此,我使用for
方法而不是map
循环 - 每个数组元素(每个INPUT节点)都被其ID值替换。
另请注意`inputs.map(...
不起作用,因为inputs
是 NodeList 元素 - 它是一个类似数组的对象,但不是标准数组。要在其上使用map
方法,我们只需将其转换为[].slice.call( inputs )
为我们所做的数组。