Динамическое формирование таблицы на JavaScript.
Опубликовано: 8 февраля 2012 Автор: admin
В своей практике неоднократно встречал ситуации, когда заказчики получают готовый сайт, прекрасно разбираются с CMS, без проблем наполняют его контентом, а вот когда приходится на какой-либо странице добавить таблицу с данными, то здесь возникают трудности: HTML не знаком, а каждый раз просить кого-то нарисовать таблицу в виде рисунка или сверстать ее – тоже не выход.
В общем, совсем недавно меня попросили пользователи Wordpress придумать какое-то решение. Как известно, редактор этой популярной CMS позволяет работать в режиме html-редактора, а это значит, что остается решить проблему лишь с формированием кода таблицы.
Я решил написать небольшой скрипт, который как раз решает последнюю задачу. То есть пользователь, не знакомый с премудростями верстки сайтов, просто вбивает нужные параметры таблицы, добавляет в ячейки нужные данные, жмет на кнопку и ему в качестве результата предоставляется готовый код таблицы.
Я бы мог написать этот скрипт на php, но мне уж очень хотелось попрактиковаться в использовании JavaScript и я решил все сделать так, чтобы пользователь получал нужные данные без какого-либо обновления страницы, то есть создать что-то вроде динамического формирования и изменения таблицы.
Готовый результат здесь. Все неоднократно тестилось, однако, если все же будут обнаружены баги, прошу сообщить:)
Сам код скрипта ниже. Как вы можете видеть, здесь множество функций по изменению атрибутов таблицы. При изменении количества ячеек пользователем, скрипт динамически формирует новые столбцы и строки, либо же удаляет их.
Для динамического формирования таблицы используются такие функции:
insertCell() – добавление ячейки
deleteCell() – удаление ячейки
insertRow() – добавление строки
deleteRow() – удаление строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | <script type="text/javascript" language="javascript">
nrow=2;//количество строк по умолчанию
ncells=2;//количество столбцов по умолчанию
bs="none";//стиль границ таблицы по умолчанию
cellpadd=0;//отступ от границы до содержимого по умолчанию
//проверка: удалить или добавить строку?
function change_tr() {
rows = document.getElementById("rows");
if(rows.value-nrow>0){
addrow();
}
else {
if(rows.value>0)
{
delrow();
}
}
}
//функция добавления строк
function addrow() {
rows = document.getElementById("rows");
ecells=document.getElementById("ecells");
for(i=0;i<rows.value-nrow;i++)
{
var newrow = mytable.insertRow(0);
for(k=0;k<ecells.value;k++)
{
newrow.insertCell(0).innerHTML = "<input type='text' value='текст'size='4'>";
}
}
nrow=rows.value;
}
//функция удаления строк
function delrow() {
var rows = document.getElementById("rows");
var lastrowindex=mytable.rows.length-1;
for(i=0;i<Math.abs(nrow-rows.value);i++) {
mytable.deleteRow(lastrowindex);
lastrowindex=lastrowindex-1;
}
nrow=rows.value;
}
//проверка: добавить столбцы или уменьшить?
function change_cells() {
var ecells = document.getElementById("ecells");
if(ecells.value-ncells>0){
addcells();
}
else {
if(ecells.value>0)
{
delcells();
}
}
}
//добавление столбцов
function addcells() {
var ecells = document.getElementById("ecells");
for(i=0;i<mytable.rows.length;i++)
{
rowname=mytable.rows[i];
for(e=0;e<Math.abs(ecells.value-ncells);e++)
{
rowname.insertCell(0).innerHTML = "<input type='text' value='текст'size='4'>";
}
}
ncells=ecells.value;
}
//удаление столбцов
function delcells() {
var ecells = document.getElementById("ecells");
for(i=0;i<mytable.rows.length;i++)
{
rowname=mytable.rows[i];
for(e=0;e<Math.abs(ecells.value-ncells);e++)
{
rowname.deleteCell(0);
}
}
ncells=ecells.value;
}
//изменение цвета границ
function addbordercolor() {
switch(document.getElementById("bordcolor").selectedIndex){
case 0:
bc="black";
break;
case 1:
bc="red";
break;
case 2:
bc="green";
break;
case 3:
bc="blue";
break;
case 4:
bc="#806b08";
break;
}
}
//изменение отображения внешних границ
function addframe() {
switch(document.getElementById("bordframe").selectedIndex) {
case 0:
bframe="border";
break;
case 1:
bframe="void";
break;
case 2:
bframe="above";
break;
case 3:
bframe="below";
break;
case 4:
bframe="rhs";
break;
case 5:
bframe="lhs";
break;
case 6:
bframe="hsides";
break;
case 7:
bframe="vsides";
break;
}
}
//изменение отображения внутренних границ
function addrules() {
switch (document.getElementById("bordrules").selectedIndex) {
case 0:
brul="all";
break;
case 1:
brul="none";
break;
case 2:
brul="cols";
break;
case 3:
brul="rows";
break;
}
}
//расположение содержимого ячейки
function change_align() {
switch (document.getElementById("cell_align").selectedIndex) {
case 0:
cellal="center";
break;
case 1:
cellal="left";
break;
case 2:
cellal="right";
break;
}
}
//формирование итоговой таблицы и кода
function get_result() {
var inputnum=document.getElementsByTagName("input");
var inindex=4;//поля для ввода данных в ячейки таблицы начинаются с 5-го input
bord=document.getElementById("bord");
cellpadd = document.getElementById("cellpadd").value;
bodyt="<table "+"border="+bord.value+" bordercolor='"+bc+"' frame='"+bframe+"'"+" rules='"+brul+"' cellpadding="+cellpadd+">";
rows=document.getElementById("rows");
ecells=document.getElementById("ecells");
<!--формируем первую строку-заголовок--->
bodyt=bodyt+"<tr align=center>";
for(n=0;n<ecells.value;n++)
{
bodyt=bodyt+"<td><b>"+inputnum[inindex].value+"</b></td>";
inindex=inindex+1;
}
bodyt=bodyt+"</tr>";
<!--формируем тело таблицы--->
for(x=0;x<rows.value-1;x++)
{
bodyt=bodyt+"<tr align="+cellal+">";
for(n=0;n<ecells.value;n++)
{
bodyt=bodyt+"<td>"+inputnum[inindex].value+"</td>";
inindex=inindex+1;
}
bodyt=bodyt+"</tr>";
}
bodyt=bodyt+"</table>";
document.getElementById("result").innerHTML=bodyt;
document.getElementById("itog_code").innerHTML="<textarea cols=100 rows=10 readonly>"+bodyt+"</textarea>";
}
</script>
</head>
<body>
<div id="content">
<h1>1.Укажите свойства таблицы:</h1>
<table>
<tr><td>Количество строк:</td><td><input type="number"name="rows"id="rows"size="20" onchange="change_tr()" value="2"></td></tr>
<tr><td>Количество столбцов:</td><td><input type="number"id="ecells"name="ecells"size="20"onchange="change_cells()"value="2"></td></tr>
<tr><td>Отступ от рамки до содержимого таблицы (cellpadding), px:</td><td> <input type="number"id="cellpadd"name="cellpadd"size="2"value="0"></td></tr>
<tr><td>Граница таблицы в пикселях:</td><td><input type="text"id="bord"name="bord"size="20"value="1"></td></tr>
<tr><td>Цвет границ таблицы:</td><td>
<select size="1" name="bordcolor"id="bordcolor"onchange="addbordercolor()">
<option>черный</option>
<option>красный</option>
<option>зеленый</option>
<option>синий</option>
<option>коричневый</option>
</select>
</td></tr>
<tr><td>Отображение внешних границ таблицы (frame):</td><td>
<select size="1" name="bordframe"id="bordframe"onchange="addframe()">
<option>все границы</option>
<option>нет внешних границ</option>
<option>граница по верхнему краю таблицы</option>
<option>граница по нижнему краю таблицы</option>
<option>граница по правому краю таблицы</option>
<option>граница по левому краю таблицы</option>
<option>границы по верхнему и нижнему краям таблицы</option>
<option>граница по левому и правому краям таблицы</option>
</select>
</td></tr>
<tr><td>Отображение внутренних границ таблицы (rules):</td><td>
<select size="1" name="bordrules"id="bordrules"onchange="addrules()">
<option>все внутренние границы</option>
<option>нет границ</option>
<option>границы между столбцами</option>
<option>границы между строками</option>
</select>
</td></tr>
<tr><td>Выравнивание содержимого ячеек:</td><td>
<select size="1" name="cell_align"id="cell_align"onchange="change_align()">
<option>по центру</option>
<option>по левому краю</option>
<option>по правому краю</option>
</select>
</td></tr>
</table>
<h1>2.Введите значения в ячейки таблицы:</h1>
<table id="my_table"name="my_table"cellpadding="2">
<thead>
<tr><th><input type="text" value="текст"size="4"></th><th><input type="text" value="текст"size="4"></th></tr>
</thead>
<tbody>
<tr>
<td><input type="text" value="текст"size="4"></td>
<td><input type="text" value="текст"size="4"></td>
</tr>
</tbody>
</table>
<h1>3.Все готово?</h1>
<button onclick="get_result()">Посмотреть и получить код</button>
<div id="result"name="result"></div>
<div id="itog_code"name="itog_code"></div>
</div>
<script>
//установка значений по умолчанию в полях при перезагрузке страницы (для вредных браузеров)
document.getElementById("rows").value=2;
document.getElementById("ecells").value=2;
document.getElementById("cellpadd").value=0;
document.getElementById("bord").value=1;
//установка всех других значений переменных при загрузке страницы или ее перезагрузке
mytable = document.getElementById("my_table");
addframe();
addrules();
addbordercolor();
change_align();
</script> |
Категория: JavaScript для сайта
