06.05.2014, 23:39
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
Динамическое объединение столбцов таблицы
Здравствуйте. Имеется таблица с 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, 06.05.2014 в 23:43.
|
|
07.05.2014, 01:40
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
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";
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>
Последний раз редактировалось рони, 07.05.2014 в 01:42.
|
|
07.05.2014, 10:24
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
рони, спасибо Вам огромное. А как сделать удаление тем и описаний и удаление разделов?
|
|
07.05.2014, 11:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
guest786,
помедитируйте тут почти схожая тема
Генерирование таблицы javascript там + добавить - добавляет - кнопку удалить
вам нужно определиться как вы будите определять раздел или тему которую нужно удалить -- сейчас код здесь 2 пост работает с последней строкой
|
|
12.05.2014, 20:17
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
Спасибо большое за ответ. А подскажите как добавить перед разделом 1 еще один столбец с номером столбца и чтобы у него тоже rowspan увеличивался а то я че то разобраться не могу. Использую вышеописанный код который Вы написали
|
|
12.05.2014, 21:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
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>
|
|
12.05.2014, 21:31
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
Сообщение от рони
|
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>
|
Огромнейшее Вам Спасибо за помощь
|
|
19.05.2014, 23:03
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
Пытаюсь удалить тему и описание. Все удаляет но при добавлении нового раздела происходит смещение всего. не пойму почему. Подскажите пожалуйста что я делаю не так. Заранее спасибо за ответ
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);
}
|
|
20.05.2014, 00:56
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
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>
Последний раз редактировалось рони, 20.05.2014 в 01:23.
|
|
21.05.2014, 19:56
|
Новичок на форуме
|
|
Регистрация: 06.05.2014
Сообщений: 7
|
|
Спасибо Вам большое. Я наверно Вам уже надоел. А как сделать когда последняя строка остается в столбце "раздел" ничего не делать? а то он удаляет тему и описание а раздел оставляет. И последний вопрос как реализовать удаление всего раздела в независимости от того сколько там тем. т.е одной кнопкой определенный раздел. Заранее спасибо Вам за помощь
|
|
|
|