Javascript 从html表创建json数组 < >我有C++程序导出日志文件作为HTML表,我想知道是否有任何方法可以解析该表(类似的东西):
问题是,我希望此函数对给定给它的每个表都有效,并且具有任何可能的行或列计数(第一行始终是标题)。类似于此,假设第一行始终是标题(当然可以更改以使其更灵活): 通过传递format函数,可以将每个单元格的值格式化为正确的数据类型Javascript 从html表创建json数组 < >我有C++程序导出日志文件作为HTML表,我想知道是否有任何方法可以解析该表(类似的东西):,javascript,json,Javascript,Json,问题是,我希望此函数对给定给它的每个表都有效,并且具有任何可能的行或列计数(第一行始终是标题)。类似于此,假设第一行始终是标题(当然可以更改以使其更灵活): 通过传递format函数,可以将每个单元格的值格式化为正确的数据类型 它是在假定只有一个tbody元素的情况下工作的。您必须根据自己的需要进行调整。您可以使用jquery框架进行调整。我 <sript src="http://code.jquery.com/jquery-latest.js"></script> &
它是在假定只有一个
tbody
元素的情况下工作的。您必须根据自己的需要进行调整。您可以使用jquery框架进行调整。我
<sript src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function(){
var chartData = [];
$("table tr").each(function(i){
if(i==0) return;
var id = $.trim($(this).find("td").eq(0).html());
var value1 = $.trim($(this).find("td").eq(1).html());
var value2 = $.trim($(this).find("td").eq(2).html());
chartData.push({id: id, value1: value1, value2: value2});
});
//now you have the chartData array filled
});
</script>
$(函数(){
var chartData=[];
$(“表tr”)。每个(功能(i){
如果(i==0)返回;
var id=$.trim($(this.find(“td”).eq(0.html());
var value1=$.trim($(this.find(“td”).eq(1.html());
var value2=$.trim($(this.find(“td”).eq(2.html());
push({id:id,value1:value1,value2:value2});
});
//现在您已经填充了chartData数组
});
干杯。以下是我的实现:
var tableToObj = function( table ) {
var trs = table.rows,
trl = trs.length,
i = 0,
j = 0,
keys = [],
obj, ret = [];
for (; i < trl; i++) {
if (i == 0) {
for (; j < trs[i].children.length; j++) {
keys.push(trs[i].children[j].innerHTML);
}
} else {
obj = {};
for (j = 0; j < trs[i].children.length; j++) {
obj[keys[j]] = trs[i].children[j].innerHTML;
}
ret.push(obj);
}
}
return ret;
};
由于该表格式看起来像格式良好的XML,我将使用XSLT进行转换;您的C++程序可以只调用XSLT引擎。< P>我需要相同的东西,除了忽略列、重写值和不被嵌套表混淆之外。最后,我将jQuery插件
表写入json
:
您只需使用jQuery选择表并调用插件:
var table = $('#example-table').tableToJSON();
下面是一个使用您的数据进行操作的演示:
chartData
是一个普通的JavaScript数组,而不是JSON(今天一定是出了问题,很多人对此感到困惑)。无论如何,我如何从一个表到一个数组提取数据?如果您可以使用jquery,这应该是一项简单的工作。但是,如果没有jquery,这将是一个有趣的挑战。。。认可的!我不得不将这一行:“row_data[header[j]=format(I,j,cell.textContent | | | cell.innerText)”更改为:“row_data[header[j]=format(cell.textContent | | cell.innerText)”,以使其正常工作。@Jean-Philippe:format函数接受多少个参数?如果要按原样使用代码,则必须为3。
var chartData = getData(referenceToTable, function(rowIndex, colIndex, value) {
return +value; // shortcut to format text to a number
});
<sript src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(function(){
var chartData = [];
$("table tr").each(function(i){
if(i==0) return;
var id = $.trim($(this).find("td").eq(0).html());
var value1 = $.trim($(this).find("td").eq(1).html());
var value2 = $.trim($(this).find("td").eq(2).html());
chartData.push({id: id, value1: value1, value2: value2});
});
//now you have the chartData array filled
});
</script>
var tableToObj = function( table ) {
var trs = table.rows,
trl = trs.length,
i = 0,
j = 0,
keys = [],
obj, ret = [];
for (; i < trl; i++) {
if (i == 0) {
for (; j < trs[i].children.length; j++) {
keys.push(trs[i].children[j].innerHTML);
}
} else {
obj = {};
for (j = 0; j < trs[i].children.length; j++) {
obj[keys[j]] = trs[i].children[j].innerHTML;
}
ret.push(obj);
}
}
return ret;
};
var obj = tableToObj( document.getElementsByTagName('table')[0] ); // or
var obj = tableToObj( document.getElementById('myTable') );
var table = $('#example-table').tableToJSON();