/**
* [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. spoj QTREE - Query on a tree(树链剖分+线段树单点更新,区间查询)

    传送门:Problem QTREE https://www.cnblogs.com/violet-acmer/p/9711441.html 题解: 树链剖分的模板题,看代码比看文字解析理解来的快~~~ ...

  2. MFC中运行出现问题“不支持尝试执行的操作”

    http://blog.csdn.net/maturn/article/details/8051987 问题描述: 基于CDialogEx的对话框工程.VS2010开发环境. 调试运行到OnInitD ...

  3. Class对象、反射机制、获取Constructor构造方法

    1.Class对象的三种创建方法(Class首字母大写) public class Demo { public static void main(String[] args){ Object obj= ...

  4. UDP网路会议室的代码

    UDP网络会议室视频已经录制好,这里贴上代码仅供参考 MainWindow代码: using System; using System.Collections.Generic; using Syste ...

  5. 为什么要用redis

    服务端的程序如何去识别客户端的状态: http是没有状态的,比如说用户A访问了服务器程序,那服务器如何知道下一次访问的时候还是A呢,这里就要用到session, 这个session是服务器的sessi ...

  6. Frame size of 257 MB larger than max allowed 100 MB

    ActiveMQ有时会报类似Frame size of 257 MB larger than max allowed 100 MB的错误,意思是单条消息超过了预设的最大值,在配置文件中 <tra ...

  7. mvn依赖冲突

    https://www.cnblogs.com/twoheads/p/10082453.html

  8. FZU 2254 英语考试

    在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习. 这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m. YellowSatr准备采用联想记忆法来背诵这 ...

  9. QT_文本编辑器_源码下载

    源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...

  10. 重定向printf

    #include "stdio.h" #ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else# ...