Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2014, 18:49
Интересующийся
Отправить личное сообщение для sonntagausgang Посмотреть профиль Найти все сообщения от sonntagausgang
 
Регистрация: 24.05.2013
Сообщений: 25

Генерирование таблицы javascript
Все привет. Сижу разбираюсь с таблицами. Не подскажите как сделать.
У меня есть таблицы на html такого вида.
<tr>
		<td>День</td>
		<td>№</td>
		<td>Начало</td>
		<td>Подгруп</td>
	</tr>
	<tr>
		<td rowspan="5">Понедельник</td>
		<td>1</td>
		<td>9:00</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>2</td>
		<td>10:45</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>3</td>
		<td>13:10</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>4</td>
		<td>14:55</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>5</td>
		<td>16:20</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>


Необходимо чтобы при клике на span с class="addSub" (на плюсик) добавлялась новая строка под ней. То есть у понедельника раньше был rowspan 5 а должен стать шесть и так далее. И столбы, которые справа должны изменять rowspan. Ну то есть должна появиться таблица следующего вида:
<tr>
		<td>День</td>
		<td>№</td>
		<td>Начало</td>
		<td>Подгруп</td>
	</tr>
	<tr>
		<td rowspan="6">Понедельник</td>
		<td rowspan="2">1</td>
		<td rowspan="2">9:00</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr><td style="display:none;"></td><td style="display:none;"></td><td><span class="deleteSub">[-]</span></td></tr><tr>
		<td class="hiddenTd"></td>
		<td>2</td>
		<td>10:45</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>3</td>
		<td>13:10</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>4</td>
		<td>14:55</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>5</td>
		<td>16:20</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
            <span class="deleteSub" style="display: none;">[-]</span>
        </td>
	</tr>


Потестировать можно здесь http://sonntag.besaba.com/index2.html

Если один раз нажать на плюсик в каждой строке то все идет нормально. Если кликнуть еще раз там то косячит. Я так и так мучился ничего не получилось. Просто поставил два в строчках 42 и 43 объединение двух строк. А как автоматизировать чтобы можно кликать до бесконечности и столбцы объединялись.
var table = document.getElementById('table');

var counter = 5;
var counter7 = 5;
// var counter3 = 5;
// var counter4 = 5;
// var counter5 = 5;
// var counter6 = 5;

var linecount = 1;
var linecount2 = 6;
var linecount3 = 11;
// var linecount4 = 16;
// var linecount5 = 21;
// var linecount6 = 0;

table.onclick = function(e) {
  var event = e || window.event;
  var target = event.target || event.srcElement;
  if (target.className != 'addSub') return;
  	var t_value = target.parentNode.parentNode.rowIndex;
  	var row = table.insertRow(t_value+1);
  	var cell = row.insertCell(0).setAttribute('style','display:none;');
    var cell = row.insertCell(1).setAttribute('style','display:none;');
    var cell = row.insertCell(2);

  	cell.innerHTML = "<span class='deleteSub'>[-]</span>";

    if (t_value < linecount2 && t_value >= linecount) {
        counter++;
        table.rows[1].cells[0].setAttribute('rowspan', counter);
        linecount2++; 
        linecount3++;
    }
    else if (t_value < linecount3 && t_value >= linecount2) {
        counter7++;
        table.rows[linecount2].cells[0].setAttribute('rowspan', counter7);
        linecount3++;

    }

  	table.rows[t_value].cells[1].setAttribute('rowspan', 2);
  	table.rows[t_value].cells[2].setAttribute('rowspan', 2);
    
  return false;
}
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2014, 22:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,071

sonntagausgang,
Вариант...
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="http://sonntag.besaba.com/style.css">
   <script>
    document.onclick = function (e) {
        var target = e && e.target || event.srcElement;
        if (target.className == "addSub") {
            var parent = target.parentNode.parentNode;
            indx = parent.rowIndex,
            tds = parent.querySelectorAll('td');
            for (var i = 1; i < tds.length - 1; i++) {
                tds[i].rowSpan = ++tds[i].rowSpan
            }
            var tbody = parent.parentNode;
            var tr = tbody.insertRow(++indx);
            var td = tr.insertCell(0);
            td.colSpan = "4";
            td.innerHTML = "<span class='deleteSub'>[-]</span>";
            while (--indx) {
                td = tbody.rows[indx].cells[0]
                if (td.className == "day") break;
            }
            td.rowSpan = ++td.rowSpan
        };
        if (target.className == "deleteSub") {
            var parent = target.parentNode.parentNode;
            indx = parent.rowIndex;
            var tbody = parent.parentNode;
            var tr = tbody.deleteRow(indx);
            var flag = true;
            while (indx) {
                tr = tbody.rows[--indx];
                if (tr.cells[0].className == "hiddenTd" && flag) {
                    flag = false;
                    tr.cells[1].rowSpan = --tr.cells[1].rowSpan
                    tr.cells[2].rowSpan = --tr.cells[2].rowSpan
                };

                if (tr.cells[0].className == "day") break;
            }
            tr.cells[0].rowSpan = --tr.cells[0].rowSpan
        };
    }
</script>
</head>

<body>
 <table border="1" id="table"><tr>
		<td>День</td>
		<td>№</td>
		<td>Начало</td>
		<td>Подгруп</td>
	</tr>
	<tr>
		<td rowspan="6" class="day">Понедельник</td>
	</tr>
    <tr>
		<td class="hiddenTd"></td>
		<td >1</td>
		<td >9:00</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>

	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>2</td>
		<td>10:45</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>3</td>
		<td>13:10</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>4</td>
		<td>14:55</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>5</td>
		<td>16:20</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td rowspan="6" class="day">Вторник</td>
	</tr>
    <tr>
		<td class="hiddenTd"></td>
		<td >1</td>
		<td >9:00</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>

	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>2</td>
		<td>10:45</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>3</td>
		<td>13:10</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>4</td>
		<td>14:55</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
	<tr>
		<td class="hiddenTd"></td>
		<td>5</td>
		<td>16:20</td>
		<td>
			<span class="addSub" style="display: inline;">[+]</span>
        </td>
	</tr>
 </table>
</body>

</html>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение таблицы на JavaScript freeze123 Opera, Safari и др. 4 08.04.2013 09:42
Анимация slide для таблицы на javascript Jmunb Элементы интерфейса 1 13.11.2012 12:57
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
генерирование полей таблицы sinh Элементы интерфейса 19 23.05.2010 10:29