table-to-json
by notchris
HTML
<table id="example-table" class="table table-bordered table-striped">
<thead>
<tr><th>name</th><th>extension</th><th>position</th></tr>
</thead>
<tbody>
<tr><td>Accounts Payable</td><td>194</td><td> </td></tr>
<tr><td>Adam Culbert</td><td>172</td><td>Apprentice Maintenance Engineer</td></tr>
<tr><td>Amy Sailor</td><td>163</td><td>Advancement Program Manager</td></tr>
<tr><td>Andrew Fotta</td><td>128</td><td>STEM Educator II</td></tr>
<tr><td>Andrew McKenzie</td><td>137</td><td>Sr. Exhibit Technician</td></tr>
<tr><td>Aoife Ryle</td><td>145</td><td>STEM Educator I</td></tr>
<tr><td>April Paterno</td><td>129</td><td>Director of Development</td></tr>
<tr><td>Brian Barlow</td><td>185</td><td>Exhibit & Facility Technician</td></tr>
<tr><td>Brit Montmeat</td><td>112</td><td>Group Sales Account Manager</td></tr>
<tr><td>Bryan Avery</td><td>126</td><td>STEM Educator I</td></tr>
<tr><td>Caity Leamy </td><td>168</td><td>Sr. Reservation Center Data Coordinator</td></tr>
<tr><td>Cherie Sweeney</td><td>123</td><td>Vice President of Operations</td></tr>
<tr><td>Cheryl Tokarski</td><td>179</td><td>Vice President of Programs</td></tr>
<tr><td>Chris McGrane</td><td>144</td><td>Web Developer</td></tr>
<tr><td>Chris Zieminski</td><td>133</td><td>Professional Development Specialist II</td></tr>
<tr><td>Claudia Davis</td><td>158</td><td>Operations & HR Generalist</td></tr>
<tr><td>David Hernandez</td><td>134</td><td>Advancement Program Coordinator</td></tr>
<tr><td>Deborah Swanson</td><td>113</td><td>Finance Manager</td></tr>
<tr><td>Ed Lane</td><td>130</td><td>Director of Facilities & Exhibits Support</td></tr>
<tr><td>EJ Devokaitis</td><td>161</td><td>3D Projectionist/Multimedia Specialist</td></tr>
<tr><td>Ellie Clark</td><td>147</td><td>Horticulturalist/Butterfly Encounter Assistant</td></tr>
<tr><td>Emily Hayes</td><td>178</td><td>Programs Department Administrator</td></tr>
<tr><td>Eva Cintron</td><td>136</td><td>Visitor...
CSS
textarea {
width: 600px;
height: 120px;
}
JavaScript
(function ($) {
'use strict';
$.fn.tableToJSON = function (opts) {
// Set options
var defaults = {
ignoreColumns: [],
onlyColumns: null,
ignoreHiddenRows: true,
headings: null,
allowHTML: false
};
opts = $.extend(defaults, opts);
var notNull = function (value) {
return value !== undefined && value !== null;
};
var ignoredColumn = function (index) {
if (notNull(opts.onlyColumns)) {
return $.inArray(index, opts.onlyColumns) === -1;
}
return $.inArray(index, opts.ignoreColumns) !== -1;
};
var arraysToHash = function (keys, values) {
var result = {}, index = 0;
$.each(values, function (i, value) {
// when ignoring columns, the header option still starts
// with the first defined column
if (index < keys.length && notNull(value)) {
result[keys[index]] = value;
index++;
}
});
return result;
};
var cellValues = function (cellIndex, cell) {
var value, result;
if (!ignoredColumn(cellIndex)) {
var override = $(cell).data('override');
if (opts.allowHTML) {
value = $.trim($(cell).html());
} else {
value = $.trim($(cell).text());
}
result = notNull(override) ? override : value;
}
return result;
};
var rowValues = function (row) {
var result = [];
$(row).children('td,th').each(function (cellIndex, cell) {
if (!ignoredColumn(cellIndex)) {
result.push(cellValues(cellIndex, cell));
}
});
return result;
};
var...