Create and edit an HTML5 table without the use of a library. Uses HTML5's contenteditable and minimal JavaScript.
Created
November 19, 2019 10:29
-
-
Save noetits/1594a64b640c49e2e2812f798152c6b8 to your computer and use it in GitHub Desktop.
HTML5 Editable Table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="container"> | |
<h1>HTML5 Editable Table</h1> | |
<p>Through the powers of <strong>contenteditable</strong> and some simple jQuery you can easily create a custom editable table. No need for a robust JavaScript library anymore these days.</p> | |
<ul> | |
<li>An editable table that exports a hash array. Dynamically compiles rows from headers</li> | |
<li>Simple / powerful features such as add row, remove row, move row up/down.</li> | |
</ul> | |
<div id="table" class="table-editable"> | |
<span class="table-add glyphicon glyphicon-plus"></span> | |
<table class="table"> | |
<tr> | |
<th>Adjective</th> | |
<th>Axis 1</th> | |
<th>Axis 2</th> | |
<th>Axis 3</th> | |
<th>Axis 4<th> | |
<th></th> | |
<th></th> | |
</tr> | |
<tr> | |
<td contenteditable="true">Stir Fry</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td> | |
<span class="table-remove glyphicon glyphicon-remove"></span> | |
</td> | |
<td> | |
<span class="table-up glyphicon glyphicon-arrow-up"></span> | |
<span class="table-down glyphicon glyphicon-arrow-down"></span> | |
</td> | |
</tr> | |
<tr> | |
<td contenteditable="true">Stir Fry</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td contenteditable="true">0</td> | |
<td> | |
<span class="table-remove glyphicon glyphicon-remove"></span> | |
</td> | |
<td> | |
<span class="table-up glyphicon glyphicon-arrow-up"></span> | |
<span class="table-down glyphicon glyphicon-arrow-down"></span> | |
</td> | |
</tr> | |
<!-- This is our clonable table line --> | |
<tr class="hide"> | |
<td contenteditable="true">Untitled</td> | |
<td contenteditable="true">undefined</td> | |
<td> | |
<span class="table-remove glyphicon glyphicon-remove"></span> | |
</td> | |
<td> | |
<span class="table-up glyphicon glyphicon-arrow-up"></span> | |
<span class="table-down glyphicon glyphicon-arrow-down"></span> | |
</td> | |
</tr> | |
</table> | |
</div> | |
<button id="export-btn" class="btn btn-primary">Export Data</button> | |
<p id="export"></p> | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var $TABLE = $('#table'); | |
var $BTN = $('#export-btn'); | |
var $EXPORT = $('#export'); | |
$('.table-add').click(function () { | |
var $clone = $TABLE.find('tr.hide').clone(true).removeClass('hide table-line'); | |
$TABLE.find('table').append($clone); | |
}); | |
$('.table-remove').click(function () { | |
$(this).parents('tr').detach(); | |
}); | |
$('.table-up').click(function () { | |
var $row = $(this).parents('tr'); | |
if ($row.index() === 1) return; // Don't go above the header | |
$row.prev().before($row.get(0)); | |
}); | |
$('.table-down').click(function () { | |
var $row = $(this).parents('tr'); | |
$row.next().after($row.get(0)); | |
}); | |
// A few jQuery helpers for exporting only | |
jQuery.fn.pop = [].pop; | |
jQuery.fn.shift = [].shift; | |
$BTN.click(function () { | |
var $rows = $TABLE.find('tr:not(:hidden)'); | |
var headers = []; | |
var data = []; | |
// Get the headers (add special header logic here) | |
$($rows.shift()).find('th:not(:empty)').each(function () { | |
headers.push($(this).text().toLowerCase()); | |
}); | |
// Turn all existing rows into a loopable array | |
$rows.each(function () { | |
var $td = $(this).find('td'); | |
var h = {}; | |
// Use the headers from earlier to name our hash keys | |
headers.forEach(function (header, i) { | |
h[header] = $td.eq(i).text(); | |
}); | |
data.push(h); | |
}); | |
// Output the result | |
$EXPORT.text(JSON.stringify(data)); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script> | |
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js"></script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@import "compass/css3"; | |
.table-editable { | |
position: relative; | |
.glyphicon { | |
font-size: 20px; | |
} | |
} | |
.table-remove { | |
color: #700; | |
cursor: pointer; | |
&:hover { | |
color: #f00; | |
} | |
} | |
.table-up, .table-down { | |
color: #007; | |
cursor: pointer; | |
&:hover { | |
color: #00f; | |
} | |
} | |
.table-add { | |
color: #070; | |
cursor: pointer; | |
position: absolute; | |
top: 8px; | |
right: 0; | |
&:hover { | |
color: #0b0; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" rel="stylesheet" /> | |
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" /> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment