Динамическое удаление строк таблицы 
		
		
		
		Здравствуйте. Требуется сделать динамическое добавление строк в таблицу на экране и динамическое удаление выбранных строк (выбор осуществляется чекбоксом). События удаления/добавления: кнопки. Добавляю так: 
	
{
z = document.getElementById('out'); // Получаем ссылку на таблицу
d = z.insertRow(z.rows.length); // Добавляем строку
d.setAttribute("id", "row_" + nextcount);
// Формируем строку элементов управления
z = document.createElement("input"); // Чекбокс (он указывает на удаляемую строку)
z.setAttribute("type", "checkbox");
z.setAttribute("id", "check_" + nextcount);	
d.appendChild(z); // Добавляем к строке
// Текст
tn1 = document.createTextNode("текст "+(counter+1)+" ");
d.appendChild(tn1); // Добавляем к строке
z = document.createElement("input"); // Строка ввода
z.setAttribute("type", "text");
z.setAttribute("name", "answer"+counter);
z.setAttribute("id", "input_" + nextcount);
d.appendChild(z); // Добавляем к строке
out.appendChild(d); // Добавляем строку к таблице
}
А вот с удалением проблема. Пробовал работать с id, однако получается слишком сложно. Решил сделать удаление с помощью pTable.deleteRow(numRow). В начале id чекбоксов совпадают с номером строки, поэтому можно считать значени чекбокса по номеру строки. Проблема в том, что после удаления части строк id чекбокса и номер строки уже никак не коррелируют, поэтому я не могу получить номер удаляемой строки (он определяется по наличию включенного чекбокса). Как можно получить значение чекбокса по номеру строки таблицы, в которой чекбокс расположен?  | 
	
		
 Идентификаторы вообще не нужны, у каждой строки есть свойство rowIndex: 
	
var table = document.getElementById('out'); 
function deleteRows(table) {
	var inputs = table.getElementsByTagName("input");
	var i = inputs.length;
	while (i--) {
		var input = inputs[i];
		if (input.checked == true) {
			var tr = input.parentNode.parentNode;
			table.deleteRow(tr.rowIndex);
		}
	}
}
Можно и еще раз наверх подняться и удалить tr через обычный removeChild. Код не проверял. p.s. однобуквенные имена переменных зло  | 
	
		
 Спасибо. Насчет rowIndex не знал. Может быть, подскажете хорошую литературу по JavaScript с подробным описанием функций? 
	P.S. Замечание по коду. Используя выражение var tr = input.parentNode.parentNode;я получал сообщение об ошибке. Вывел результат tr и получил, что в результате такого выражения тип tr HTMLTableElement. Я убрал один parentNode и получил уже HTMLTableRowElement, т.е. var tr = input.parentNode;В этом случае функция работает так как и надо.  | 
	
		
 Цитата: 
	
  | 
	
		
 У вас input прямо в tr лежит? Вообще должно быть так: 
	
<table>
     <tr>
        <td><input … /></td>
…
тогда первый раз parentNode выдаст td, а второй — tr. Литературу не знаю, почти не читал книжек по JavaScript, на этом сайте есть несколько книг, возможно, в них есть это http://javascript.ru/book  | 
	
		
 >>Octane: "Вообще должно быть так:" 
	Согласен с Вашим замечанием). Я просто для теста быстро накидывал, отсюда и строки без столбцов и однобуквенные переменные... То, для чего тему открывал, сделал. Всем спасибо.  | 
	
		
 Помогите разобраться с похожей проблемой 
		
		
		
		Добрый день. проблема такая. 
	есть страничка HTM, на которой отлавливается ввод с клавиатуру и пишется в строковую переменную до нажатия ENTER. Далее полученную строку мы добаляем в массив и выводим в таблицу на экране. таблица состоит из 3 столбцов. в первом: находится checkbox/ во-втором: табельный номер(но он пока не заполняется) в третьем: выводятся или данная строка или часть этой строки. мне нужно чтоб пользователь мог выделить галочками ненужную строку и по нажатию кнопки(допустим "DELETE") удалялись выбранные строки. подскажите плиз, как это можно сделать? Код прилагаю: 
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<head>
<title>SAP</title>
<script language="javascript" type="text/javascript">
var char1 = '', mass = new Array(), lastn = '',
    fastn = '', middlen = '', s4 = 0, s41 = 0, f = false;
var fio1 = "";
// Отлов ввода с клавы
function press(event)
{
     if(event.keyCode == "13"){ 
          mass[mass.length] = char1;
          //fio()
          char1 = '';
          f = true;
          insRow();
 }else{ 
          char1 += String.fromCharCode(event.keyCode);
 } 
}    
// разбивание строки полученной при вводе с клавы
function fio()
{
   for (i = 0; i < char1.length; i ++ )
   {
      // подсчет знаков "!"
      if (char1.charAt(i) == '!')
      {
         s4 = s4 + 1;
         s41 = i
       }
      if (s4 == 14 && i != s41) // фамилия
      {
         lastn += char1.charAt(i)
      }
      if (s4 == 15 && i != s41) // имя
      {
         fastn += char1.charAt(i)
      }
      if (s4 == 16 && i != s41) // отчество
      {
         middlen += char1.charAt(i)
      }
   }
fio1 = lastn + " " + fastn + " " + middlen;
}
// функция для добавления новой строки в таблицу на экране
function insRow()
{
   var x = document.getElementById('MyTable').insertRow(0);
   var k = x.insertCell(0);
   var y = x.insertCell(1);
   var z = x.insertCell(2);
   k.innerHTML = '<td><input type="checkbox" id=checkN"' + ((mass.length) - 1) + '"></td>';
   y.innerHTML = "табельный номер";
   if(f){z.innerHTML = mass[mass.length-1];
                f = false;
   }else{z.innerHTML = fio1;}
}
function demo()
{
   char1 = '!!8!!!01!001234567891!!1!0!2011-01-01!Городская больница №1!г.Москва, ул.Бутырская, д.88!123456789012345!PAULSEN!OLAF!!1965-10-12!0!ОАО Предприятие!1!01!!!!0!!!!!!!!!!!!!!!!!!!!!!2013-06-05!2013-06-12!Терапевт!Петрова В.В.!!!!!!!!!!!1994-04-22!!';
   if (char1.charAt(0) == '!' && char1.charAt(1) == '!' && char1.charAt(2) == '8' && char1.charAt(3) == '!' && char1.charAt(4) == '!' && char1.charAt(5) == '!')
  {
     mass[mass.length] = char1;
     fio();
    char1 = '';
    insRow();
  }
}
// данная  функция складывает элементы массива в строку и отправляет их на сервер
//var result = "!!8!!!";
//function sendtosap()
//{
//  var r = confirm(mass[])
//  result = result + '@';
//  if (r == true){
//  document.f1.h1.value = result;
//  document.location.reload(true);
//  }
// else
//  result = "";
//}
</script>
</head>
<body onkeypress = "press(event)">
<H1>"SAP"</H1>
<div id="header" style="background-color:#87CEFA;">
<INPUT TYPE="button" NAME="myButton" value="Добавить строку готовую строку, вместо ввода с клавы"
   onClick="demo()">
   
 <form  id="fms" method="get" action="">
    <DIV style="position: absolute; top: 130px; left: 20px;
                         background-color: #F0FFFF ; color: navy">
            <table id="MyTable" border="1">
            </table>
    </DIV>
 </form>  
 
<form name = "f1" method="POST" action="sapevent:longtext">
      <DIV style="position: absolute; top: 80px; left: 1000px;
                         background-color: #7FFFD4 ; color: navy">
           <INPUT TYPE="submit" value="Send text to SAP" name="cc" onclick = "sendtosap(event) ">
       <br /><input type="hidden" value="" name="h1"/>
    </DIV>
</form>
</body>
</html>
 | 
	
		
 Angelo4ek88, 
	
<!DOCTYPE html>
<html>
<head>
<title>SAP</title>
<meta charset="utf-8">
<script language="javascript" type="text/javascript">
var char1 = '', mass = new Array(), lastn = '',
    fastn = '', middlen = '', s4 = 0, s41 = 0, f = false;
var fio1 = "";
// Отлов ввода с клавы
function press(event)
{
     if(event.keyCode == "13"){
          mass[mass.length] = char1;
          //fio()
          char1 = '';
          f = true;
          insRow();
 }else{
          char1 += String.fromCharCode(event.keyCode);
 }
}
// разбивание строки полученной при вводе с клавы
function fio()
{
   for (i = 0; i < char1.length; i ++ )
   {
      // подсчет знаков "!"
      if (char1.charAt(i) == '!')
      {
         s4 = s4 + 1;
         s41 = i
       }
      if (s4 == 14 && i != s41) // фамилия
      {
         lastn += char1.charAt(i)
      }
      if (s4 == 15 && i != s41) // имя
      {
         fastn += char1.charAt(i)
      }
      if (s4 == 16 && i != s41) // отчество
      {
         middlen += char1.charAt(i)
      }
   }
fio1 = lastn + " " + fastn + " " + middlen;
}
// функция для добавления новой строки в таблицу на экране
function insRow()
{
   var x = document.getElementById('MyTable').insertRow(0);
   var k = x.insertCell(0);
   var y = x.insertCell(1);
   var z = x.insertCell(2);
   k.innerHTML = '<input type="checkbox" id=checkN"' + ((mass.length) - 1) + '">';
   y.innerHTML = "табельный номер";
   if(f){z.innerHTML = mass[mass.length-1];
                f = false;
   }else{z.innerHTML = fio1;}
}
function demo()
{
   char1 = '!!8!!!01!001234567891!!1!0!2011-01-01!Городская больница №1!г.Москва, ул.Бутырская, д.88!123456789012345!PAULSEN!OLAF!!1965-10-12!0!ОАО Предприятие!1!01!!!!0!!!!!!!!!!!!!!!!!!!!!!2013-06-05!2013-06-12!Терапевт!Петрова В.В.!!!!!!!!!!!1994-04-22!!';
   if (char1.charAt(0) == '!' && char1.charAt(1) == '!' && char1.charAt(2) == '8' && char1.charAt(3) == '!' && char1.charAt(4) == '!' && char1.charAt(5) == '!')
  {
     mass[mass.length] = char1;
     fio();
    char1 = '';
    insRow();
  }
}
// данная  функция складывает элементы массива в строку и отправляет их на сервер
//var result = "!!8!!!";
//function sendtosap()
//{
//  var r = confirm(mass[])
//  result = result + '@';
//  if (r == true){
//  document.f1.h1.value = result;
//  document.location.reload(true);
//  }
// else
//  result = "";
//}
function del_row() {
    var nodeList = document.getElementsByTagName('input');
    var array = Array.prototype.slice.call(nodeList);
    for (var i = 0; i < array.length; i++) {
        if (array[i].checked) {
            var tr = array[i].parentNode.parentNode;
            var parent = tr.parentNode
            parent.removeChild(tr);
        }
    }
}</script>
</head>
<body onkeypress = "press(event)">
<H1>"SAP"</H1>
<div id="header" style="background-color:#87CEFA;">
<INPUT TYPE="button" NAME="myButton" value="Добавить строку готовую строку, вместо ввода с клавы"
   onClick="demo()">
 <form  id="fms" method="get" action="">
    <DIV style="position: absolute; top: 130px; left: 20px;
                         background-color: #F0FFFF ; color: navy">
            <table id="MyTable" border="1">
            </table>
            <input name="" type="button" value="del_check_row" onclick="del_row()">
    </DIV>
 </form>
<form name = "f1" method="POST" action="sapevent:longtext">
      <DIV style="position: absolute; top: 80px; left: 1000px;
                         background-color: #7FFFD4 ; color: navy">
           <INPUT TYPE="submit" value="Send text to SAP" name="cc" onclick = "sendtosap(event) ">
       <br /><input type="hidden" value="" name="h1"/>
    </DIV>
</form>
</DIV>
</body>
</html>
 | 
	
		
 Angelo4ek88, 
	зачем теги td в Цитата: 
	
  | 
	
		
 Цитата: 
	
 но Спасибо огромное что отозвались на мой крик о помощи.. просто уже мозг вскипел а результата не было..  | 
| Часовой пояс GMT +3, время: 14:04. |