/**
* [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. jQuery倒计时代码(超简单)

    <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8&q ...

  2. vs widows服务的开发

    最近再做一个视频管理系统,发现用户提交时实时转换视频非常慢.于是有了通过建立一个单独的服务.通过服务定时查询数据库,是否有需要转换的视频来解决问题.现把过程记录下来,已供参考 1.新建widows 服 ...

  3. 十一、java线程

    目录: 一.线程的基本概念 二.线程的创建和启动 三.线程的调度和优先级 四.线程的状态控制 五.线程同步 一.线程的基本概念 线程是一个程序内部的顺序控制流 线程和进程的区别: 每个进程都由独立的代 ...

  4. JS解析url

    window.location.href 整个url字符串 window.location.protocol url的协议部分 window.location.host url的主机部分 window ...

  5. Elasticsearch5.5 多机集群配置和x-pack安装配置

    x-pack安装配置 https://www.elastic.co/guide/en/elasticsearch/reference/current/installing-xpack-es.html ...

  6. golang 的时间格式化操作

    怎么做 简而言之 time.Now().Format("2006-01-02 15:04:05") 你将会获得如同 yyyy-MM-dd hh-mm-ss 这样的输出. 还可以 在 ...

  7. hp电脑重装win7 64位 后 所有软件都装不上问题【转】

    hp 电脑重装后 所有软件都装不上问题 装了近100来次机,第一次遇到这样的. bug描述: 新笔记本刚装了纯净版的64位旗舰版win7,想装软件,就弹出已停止工作.比如装火狐浏览器,弹出火狐浏览器网 ...

  8. buildroot构建项目(五)--- u-boot 2017.11 适配开发板修改 3 ---- 系统启动初始化之二

    一.cpu_init_crit 当执行完时钟初始化后,程序执行: bl    cpu_init_crit 跳转到CPU初始化处进行,在其中主要是执行 caches 的关闭 和 MMU的关闭,之后跳转到 ...

  9. Asp.net MVC Session过期异常的处理

    一.使用MVC中的Filter来对Session进行验证 (1)方法1: public class MyAuthorizeAttribute : FilterAttribute, IAuthoriza ...

  10. Netty入门(3) - ChannelHandler

    ChannelPipeline ChannelHandler实例的列表,用于处理或者截获通道的接收和发送数据,让用户可以在ChannelPipeline中完全控制一个事件以及处理ChannelHand ...