/**
* [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. Linux下快速分区格式化大于2T磁盘存储

    在生产环境中,我们会遇到分区大于2T的磁盘(比如:添加一个10TB的存储),由于MBR分区表只支持2T磁盘,所以大于2T的磁盘必须使用GPT分区表,而我们在做raid时会划分多个VD来进行装系统,但系 ...

  2. SQL Server利用XML找字符串相同部分

    DECLARE @a NVARCHAR(100)= '01,02,04,05,07'; DECLARE @b NVARCHAR(100)= '01,03,04,05,06'; WITH    a1   ...

  3. mysql5.6下载及安装(超级详细)

    经过本人的实验,验证这些东西都是OK的 博客原文地址:http://www.cnblogs.com/Percy_Lee/p/5282187.html

  4. Swing的特性

    1.Swing组件的多样化 2.MVC(model-view-controller)体系结构 3.可存取性支持 4.支持键盘代替鼠标的操作 5.设置边框 6.使用图标 ———————————————— ...

  5. 20181114 Redis

    Redis 下载 Windows版本 Windows版本 已经有很久没有更新了,建议还是使用Linux版本 Linux版本 官网下载即可 配置文件 Windows版本 redis.windows.co ...

  6. centos7下安装redis的步骤

    原贴地址:https://www.cnblogs.com/zuidongfeng/p/8032505.html 我linux服务器上是这样启动的: cd /tool/redis/redis-3.2.8 ...

  7. baiduTemplate.js 百度JS模板引擎

    baiduTemplate希望创造一个用户觉得“简单好用”的JS模板引擎 先展示两个例子,然后说说对baidutemplate.js的理解,从而将这一工具加到个人百宝箱里. <script id ...

  8. 基于Selenium的Web自动化框架增强篇

    在写完上一篇“基于Selenium的Web自动化框架”(http://www.cnblogs.com/AlwinXu/p/5836709.html)之后一直没有时间重新审视该框架,正好趁着给同事分享的 ...

  9. Scapy Fuzz实现——S7协议从建连到“正常交流“(一)

    转载:安全客 酝酿了“三秒钟“,准备理清逻辑写写我学习的心得,自认为和Siemens S7协议有过一段时间浅浅的“交流”,所以这过程中涉及到了自己整理的自认为有用的东西,涉及工具.脚本这般,发出来让大 ...

  10. MySQL - 日常操作一 增删改查

    mysql 源码安装 创建 mysql  账户 组 groupadd mysql useradd mysql -g mysql -M -s /bin/false 解压缩源码安装 .tar.gz cd ...