如何为 Table 单元格而不是对象或 NaN 获取 InnerHTML
How to Get InnerHTML for Table Cell instead of an object or NaN
我正在尝试使用 JavaScript 创建一个包含 HTML table 中所有数据的字符串(可以更改为 JQuery)。通过使用下面的这种方法,我收到了一个 NaN 值,而不是数据(数字)。
function Ard() {
var table = document.getElementById("tblData");
var dataStr = "";
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
var toAdd = col;
dataStr += toAdd;
}
}
};
我也试过 jQuery 方法,但它只返回一个 HTML 对象。需要注意的是,打印'col'值到控制台时,数据是正确采集的(实际值)。
我用的table是用户编辑的table,但保存为标准HTMLtable。下面是 table 的基本代码,如果它有助于解决问题。
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody></tbody>
</table>
关于如何获取内部HTML并将其正确添加到字符串的任何想法?
我还想通过逐列循环(可能是一组两个 for 或每个循环?)来执行此操作,以便我知道我从哪一列抓取。
使用 jQuery 您可以 select 所有行并遍历它们并获取文本:
var str = "", values = [];
$("#tblData").find('tbody').find('tr').each(function() {
//You can concatenate a string or push the values to an array
str += $(this).text();
values.push($(this).text());
});
console.log(str, values);
你可以用纯js来做:
function Ard() {
var table = document.querySelectorAll("#tblData tr th");
var dataStr = "";
for (var i = 0; i < table.length; i++) {
dataStr += table[i].innerHTML;
}
};
JSFiddle Demo
这会将 table <td>
和 post 中的所有文本放入文本区域(仅用于演示目的):
$('#out').val($('#tblData td').text())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>some</td><td>extra</td><td>data</td>
</tr>
</tbody>
</table>
<textarea id="out" rows=10 cols=60></textarea>
更新:
如果您 "just" 想将 <td>
内容放入单个变量中,您可以这样做:
var str=$('#tblData td').text()
我扩展了你的例子,所以你会得到一个实际的结果。
既然你可以使用 jquery,
var dataStr = "";
$('#tblData > tbody').each(function(e) {
dataStr += $(this).text();
});
console.log(dataStr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>10101</td>
<td>20202</td>
<td>30303</td>
<td>40404</td>
<td>50505</td>
</tr>
<tr>
<td>wowowo</td>
<td>sksksk</td>
<td>alalal</td>
<td>qpqpqp</td>
<td>zmzmzm</td>
</tr>
</tbody>
</table>
如果你想让 dataStr
也有 <td>
标签,你应该使用,
dataStr += $(this).html()
编辑
如果你还想访问当前的列索引,你可以使用这个。但在这里,dataStr
最终将包含一个单行字符串,用于连接 <td>
标签内的所有文本。
$('#tblData > tbody > tr > td').each(function(e) {
var currentColNo = $(this).index();
dataStr += $(this).html();
});
我正在尝试使用 JavaScript 创建一个包含 HTML table 中所有数据的字符串(可以更改为 JQuery)。通过使用下面的这种方法,我收到了一个 NaN 值,而不是数据(数字)。
function Ard() {
var table = document.getElementById("tblData");
var dataStr = "";
for (var i = 0, row; row = table.rows[i]; i++) {
for (var j = 0, col; col = row.cells[j]; j++) {
var toAdd = col;
dataStr += toAdd;
}
}
};
我也试过 jQuery 方法,但它只返回一个 HTML 对象。需要注意的是,打印'col'值到控制台时,数据是正确采集的(实际值)。
我用的table是用户编辑的table,但保存为标准HTMLtable。下面是 table 的基本代码,如果它有助于解决问题。
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody></tbody>
</table>
关于如何获取内部HTML并将其正确添加到字符串的任何想法?
我还想通过逐列循环(可能是一组两个 for 或每个循环?)来执行此操作,以便我知道我从哪一列抓取。
使用 jQuery 您可以 select 所有行并遍历它们并获取文本:
var str = "", values = [];
$("#tblData").find('tbody').find('tr').each(function() {
//You can concatenate a string or push the values to an array
str += $(this).text();
values.push($(this).text());
});
console.log(str, values);
你可以用纯js来做:
function Ard() {
var table = document.querySelectorAll("#tblData tr th");
var dataStr = "";
for (var i = 0; i < table.length; i++) {
dataStr += table[i].innerHTML;
}
};
JSFiddle Demo
这会将 table <td>
和 post 中的所有文本放入文本区域(仅用于演示目的):
$('#out').val($('#tblData td').text())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>some</td><td>extra</td><td>data</td>
</tr>
</tbody>
</table>
<textarea id="out" rows=10 cols=60></textarea>
更新:
如果您 "just" 想将 <td>
内容放入单个变量中,您可以这样做:
var str=$('#tblData td').text()
我扩展了你的例子,所以你会得到一个实际的结果。
既然你可以使用 jquery,
var dataStr = "";
$('#tblData > tbody').each(function(e) {
dataStr += $(this).text();
});
console.log(dataStr);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="tblData" class="table table-hover">
<thead>
<tr>
<th>Date</th>
<th>Time</th>
<th>Treatment Number</th>
<th>Cell Number</th>
<th>Waste Container Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>10101</td>
<td>20202</td>
<td>30303</td>
<td>40404</td>
<td>50505</td>
</tr>
<tr>
<td>wowowo</td>
<td>sksksk</td>
<td>alalal</td>
<td>qpqpqp</td>
<td>zmzmzm</td>
</tr>
</tbody>
</table>
如果你想让 dataStr
也有 <td>
标签,你应该使用,
dataStr += $(this).html()
编辑
如果你还想访问当前的列索引,你可以使用这个。但在这里,dataStr
最终将包含一个单行字符串,用于连接 <td>
标签内的所有文本。
$('#tblData > tbody > tr > td').each(function(e) {
var currentColNo = $(this).index();
dataStr += $(this).html();
});