Динамическое объединение столбцов таблицы
Здравствуйте. Имеется таблица с 3 столбцами. Нужно организовать динамическую таблицу как показано на рисунке. На форме будет 2 кнопки: 1. Добавить Раздел. 2. Добавить тему и описание.
![]() у меня есть некоторые наработки на javascript но это немного не так работает.Мне нужно чтобы при нажатии кнопки добавить раздел добавлялась строка с rowspan=1 где первый столбец имя раздела второй столбец тема и третий столбец описание, а при нажатии кнопки добавить тему rowspan первого столбца(раздел) увеличивался на 1 и добавлялись остальные столбцы. Подскажите в чем ошибка и как ее исправить. Заранее спасибо за помощь function addRow(){ var tbody = document.getElementById("tableid").getElementsByTagName("TBODY")[0]; var row = document.createElement("TR") var td1 = document.createElement("TD") td1.appendChild(document.createTextNode("column 1")) var td2 = document.createElement("TD") td2.appendChild (document.createTextNode("column 2")) row.appendChild(td1); row.appendChild(td2); tbody.appendChild(row); td = document.getElementById("td_id"); td.rowSpan+=1; } function addRow2(){ var tbody = document.getElementById("tableid").getElementsByTagName("TBODY")[0]; var row = document.createElement("TR") var td1 = document.createElement("TD") td1.id="td_id2"; td1.appendChild(document.createTextNode("row1")) var td2 = document.createElement("TD") td2.appendChild (document.createTextNode("row2")) var td3 = document.createElement("TD") row.appendChild(td1); row.appendChild(td2); tbody.appendChild(row); td = document.getElementById("td_id2"); td.rowSpan+=1; } <a href="javascript://" onclick="addRow()";return false;">Добавить раздел</a><a href="javascript://" onclick="addRow2 ()";return false;">Добавить тему и описание</a> <table id="tableid" cellspacing="0" border="1"> <tbody> <tr> <td id="td_id">row1_column1</td><td>row2_column2</td><td>row3_column3</td> </tr> </tbody> </table> |
guest786,
:write: <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <a href="javascript://" onclick="add();return false;">Добавить раздел</a><br> <a href="javascript://" onclick="add2();return false;">Добавить тему и описание</a><br> <table id="tableid" cellspacing="0" border="1"> <tbody> </tbody> </table> <script> function add() { var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.rowspan = 1; td.innerHTML = "Раздел"; td.className = "item"; add2() } function add2() { var last = document.querySelectorAll('td.item'), len = last.length; if(!len) return; var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.innerHTML = "Тема"; td = tr.insertCell(1); td.innerHTML = "Описание"; last[len-1].rowSpan+=1 } </script> </body> </html> |
рони, спасибо Вам огромное. А как сделать удаление тем и описаний и удаление разделов?
|
guest786,
помедитируйте тут почти схожая тема http://javascript.ru/forum/misc/4512...tml#post297833 там + добавить - добавляет - кнопку удалить вам нужно определиться как вы будите определять раздел или тему которую нужно удалить -- сейчас код здесь 2 пост работает с последней строкой |
Спасибо большое за ответ. А подскажите как добавить перед разделом 1 еще один столбец с номером столбца и чтобы у него тоже rowspan увеличивался а то я че то разобраться не могу. Использую вышеописанный код который Вы написали
|
guest786,
так? <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <a href="javascript://" onclick="add();return false;">Добавить раздел</a><br> <a href="javascript://" onclick="add2();return false;">Добавить тему и описание</a><br> <table id="tableid" cellspacing="0" border="1"> <tbody> </tbody> </table> <script> function add() { var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.rowspan = 1; td.innerHTML = "Раздел"; td.className = "item"; td = tr.insertCell(0); var item = document.querySelectorAll('td.item'); td.rowspan = 1; td.innerHTML = item.length; td.className = "number"; add2() } function add2() { var last = document.querySelectorAll('td.item'), len = last.length; if(!len) return; var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.innerHTML = "Тема"; td = tr.insertCell(1); td.innerHTML = "Описание"; last[len-1].rowSpan+=1; last = document.querySelectorAll('td.number'), len = last.length; last[len-1].rowSpan+=1; } </script> </body> </html> |
Цитата:
|
Пытаюсь удалить тему и описание. Все удаляет но при добавлении нового раздела происходит смещение всего. не пойму почему. Подскажите пожалуйста что я делаю не так. Заранее спасибо за ответ
function add() { var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.rowspan = 1; td.innerHTML = '<textarea name="razdel[]"></textarea>'; td.className = "item"; td = tr.insertCell(0); var item = document.querySelectorAll('td.item'); td.rowspan = 1; td.innerHTML ='<input type="text" value="'+item.length+'" size="3" readonly>'; td.className = "number"; add2() } function add2() { var last = document.querySelectorAll('td.item'), len = last.length; if(!len) return; var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.innerHTML = '<textarea name="theme[]"></textarea>'; td = tr.insertCell(1); td.innerHTML = '<textarea name="desc[]"></textarea>'; td=tr.insertCell(2); td.innerHTML='<input type="button" value="-" onclick="deleteRow(this);">'; last[len-1].rowSpan+=1; last = document.querySelectorAll('td.number'), len = last.length; last[len-1].rowSpan+=1; } function deleteRow(t) { var row = t.parentNode.parentNode; document.getElementById("tableid").deleteRow(row.rowIndex); var last = document.querySelectorAll('td.item'), len = last.length; last[len-1].rowSpan-=1; console.log(row); } |
guest786,
какое количество ячеек увеличили по высоте столько и уменьшайте <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <a href="javascript://" onclick="add();return false;">Добавить раздел</a><br> <a href="javascript://" onclick="add2();return false;">Добавить тему и описание</a><br> <table id="tableid" cellspacing="0" border="1"> <tbody> </tbody> </table> <script> function add() { var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.rowspan = 1; td.innerHTML = '<textarea name="razdel[]"></textarea>'; td.className = "item"; td = tr.insertCell(0); var item = document.querySelectorAll('td.item'); td.rowspan = 1; td.innerHTML ='<input type="text" value="'+item.length+'" size="3" readonly>'; td.className = "number"; add2() } function add2() { var last = document.querySelectorAll('td.item'), len = last.length; if(!len) return; var table = document.querySelector('#tableid') var tr = document.querySelectorAll('tr',table); var tbody = document.querySelector('tbody',table); var tr = tbody.insertRow(tr.length); var td = tr.insertCell(0); td.innerHTML = '<textarea name="theme[]"></textarea>'; td = tr.insertCell(1); td.innerHTML = '<textarea name="desc[]"></textarea>'; td=tr.insertCell(2); td.innerHTML='<input type="button" value="-" onclick="deleteRow(this);">'; last[len-1].rowSpan+=1; last = document.querySelectorAll('td.number'), len = last.length; last[len-1].rowSpan+=1; } function deleteRow(t) { var row = t.parentNode.parentNode; i = row.rowIndex; document.getElementById("tableid").deleteRow(i); for (; row = document.getElementById("tableid").rows[--i];) { if(row.querySelector('td.item')) { row.querySelector('td.item').rowSpan -= 1; row.querySelector('td.number').rowSpan -= 1; break; } } } </script> </body> </html> |
Спасибо Вам большое. Я наверно Вам уже надоел. А как сделать когда последняя строка остается в столбце "раздел" ничего не делать? а то он удаляет тему и описание а раздел оставляет. И последний вопрос как реализовать удаление всего раздела в независимости от того сколько там тем. т.е одной кнопкой определенный раздел. Заранее спасибо Вам за помощь
|
Часовой пояс GMT +3, время: 23:15. |