/**
* [getDataFromTrElems 获取表格行元素数据]
* @param {[Object]} trElems [trs dom]
* @param {[String]} type [type]
* @return {[Array]}
*/
function getDataFromTrElems(trElems, type) { if (!trElems || !trElems.length) {
return [];
} var data = [];
var cell = type == 'head' ? 'th' : 'td'; for (var i = 0, n = trElems.length; i < n; i++) { var trElem = $(trElems[i]);
var cellElems = trElem.children(cell);
var trData = []; for (var j = 0, m = cellElems.length; j < m; j++) { cellElem = $(cellElems[j]);
colspan = +cellElem.attr('colspan');
if (!(colspan > 0)) {
colspan = 1;
} rowspan = +cellElem.attr('rowspan');
if (!(rowspan > 0)) {
rowspan = 1;
} text = $.trim(cellElem.text());
trData.push({
colspan: colspan,
rowspan: rowspan,
text: text
});
} data.push(trData);
} return data;
}
/**
* [getDataFromHead 获取表格head数据]
* @param {[Object]} elem [head dom]
* @return {[Array]}
*/
function getDataFromHead(elem) { if (!elem || !elem.length) {
return [];
} var trElems = elem.children('tr');
return getDataFromTrElems(trElems, 'head');
}
/**
* [getDataFromBody 获取表格body数据]
* @param {[Object]} elem [body dom]
* @return {[Array]}
*/
function getDataFromBody(elem) { if (!elem || !elem.length) {
return [];
} var trElems = elem.children('tr');
return getDataFromTrElems(trElems, 'body');
}
/**
* [getDataFromTbaleElem 获取表格元素数据]
* @param {[Object]} elem [table dom]
* @return {[Array]}
*/
function getDataFromTbaleElem(elem) { if (!elem || !elem.length) {
return [];
} var headElem = elem.children('thead');
var bodyElem = elem.children('tbody');
var headData = getDataFromHead(headElem);
var bodyData = getDataFromBody(bodyElem);
var rawData = headData.concat(bodyData); return formRawData(rawData);
}
/**
* [formRawData 格式化表格初始数据]
* @param {[Array]} rawData [raw data]
* @return {[Array]}
*/
function formRawData(rawData) { var data = []; rawData.forEach(function(trData, i) { data[i] = data[i] && data[i].length ? data[i] : [];
var colIndex = -1; trData.forEach(function(cellData, j) { var text = cellData.text; for (var c = 0; c < cellData.colspan; c++) {
++colIndex; if (typeof data[i][colIndex] != 'undefined') {
++colIndex;
} data[i][colIndex] = text; for (var r = 2; r <= cellData.rowspan; r++) {
var rowIndex = i + r - 1;
rawData[rowIndex].splice(colIndex, 0, {
text: text,
colspan: 1,
rowspan: 1
});
}
}
});
}); return data;
} $(document).ready(function() {
var start = new Date();
var tableElems = $('table');
var results = {};
for (var index = 0, len = tableElems.length; index < len; index++) { var tableElem = $(tableElems[index]);
results[index] = getDataFromTbaleElem(tableElem);
}
var end = new Date();
console.log(results, end - start);
});

从html页面中抽取table表格数据的更多相关文章

  1. 另类爬虫:从PDF文件中爬取表格数据

    简介   本文将展示一个稍微不一样点的爬虫.   以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...

  2. 12 Servlet_04 Servlet增删改查 静态页面与动态页面 EL表达式 table表格的一些样式

    今天学习了servlet的增删改查: 存储数据 setAttribute(String name,Object obj );获取数据 getAttribute(String name);删除数据 re ...

  3. 在Winform中直接录入表格数据和在Vue&Elment中直接录入表格数据的比较

    一般来说,录入数据的时候,我们都采用在一个窗体界面中,根据不同内容进行录入,但是有时候涉及主从表的数据录入,从表的数据有时候为了录入方便,也会通过表格控件直接录入.在Winform开发的时候,我们很多 ...

  4. asp.net将内容导出到Excel,Table表格数据(html)导出EXCEL

    代码: /// <summary> /// HTML Table表格数据(html)导出EXCEL /// </summary> /// <param name=&quo ...

  5. 在JSP页面中输出JSON格式数据

    JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...

  6. Java+Selenium 如何参数化验证Table表格数据

    场景: 当我们编写脚本时候,需要验证某个表格某一列数据,或者多个列数据. 如果每验证一个就写一个方法,实在是太费事, 因此我们需要有参数化的思想,把某列数据看成固定的元素,然后去验证即可. 1. 示例 ...

  7. 如何从SAP ECC中抽取簇表数据

    打开SAP 客户端工具 ABAP 中 创建包(SE80) 创建函数组 展开ABAP 工作台,双击ABAP Dictionary 字典: 选择第三个data type,输入数据结构名称ZSQL_CLAU ...

  8. vue+iview中的table表格导出excel表格

    一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 ...

  9. 页面中 json 格式显示 数据

    在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...

随机推荐

  1. python爬虫爬取页面源码在本页面展示

    python爬虫在爬取网页内容时,需要将内容连同内容格式一同爬取过来,然后在自己的web页面中显示,自己的web页面为django框架 首先定义一个变量html,变量值为一段HTML代码 >&g ...

  2. Window配置环境变量

    拿Java为例,讲一下怎么配置环境变量使得javac可以在全局被调用: 1.添加环境变量 例如我们的Java下载在了:D:\Java\v1.8 我们就到环境变量那添加一个例如叫“Java_path”的 ...

  3. sklearn多分类问题

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  4. Scala进阶之路-Scala中的Ordered--Ordering

    Scala进阶之路-Scala中的Ordered--Ordering 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   说道对象的比较,在Java中大家最熟悉不过的就是实现类本身实 ...

  5. impala记录-安装kudu和impala

    1.配置/etc/yum.repos.d clouder-kudu.repo [cloudera-kudu]# Packages for Cloudera's Distribution for kud ...

  6. cdqz2017-test10-rehearsal(CDQ分治&可持久化线段树&单调栈)

    题意: 给出n个三元组 e[i]=(si,ti,wi) 第i个三元组的价值为 Σ w[j] ,j 满足以下4个条件: 1.j<i 2.tj<ti 3.sj<si 4.不存在j< ...

  7. I2C和SPI总线对比

    1 iic总线不是全双工,2根线SCL SDA.spi总线实现全双工,4根线SCK CS MOSI MISO 2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备.spi总线只有一个主设备, ...

  8. android app与服务器交互

    package mydemo.mycom.demo2.service; import org.apache.http.HttpResponse; import org.apache.http.Name ...

  9. Linux之常用命令【service】

    补充说明 service命令 是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,它以启动.停止.重新启动和关闭系统服务,还可以显示所有系统服务的当前状态. 语法 service(选项 ...

  10. python - class类 (七) 三大特性 - 封装 结尾

    封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...