использование DOM для вставки строки в таблицу

Alexandre

PHPПенсионер
использование DOM для вставки строки в таблицу

мне надо всьавить строку в таблицу,
каждая строка тег <TR> имеет свой ид tr1, tr2, и тд
PHP:
function getTR(){
alert('OK');
var tr = document.getElementById( "tr2" );

var tr1 = document.createElement("tr");
var td = document.createElement("td");
td.setAttribute("colspan","5")
td.Text='*****';
tr.insertBefore( tr,tr1 );
tr.appendChild(td);
}
Ругается что нет метода tr.insertBefore()
хотя в DOM для узла он поддерживается
у меня IE 6.0
 

MD

Guest
tr.insertBefore - глупость, если ты вставляешь новый TR.
это делается на таблице а не на рядке.
 

Alexandre

PHPПенсионер
MD
мне надо вставить после определенной строчки - строчку,
 

Profic

just Profic (PHP5 BetaTeam)
Но метод этот AFAIR применяется к родителю того TR, которому хочешь сделать соседа
 

AntonN

Guest
Re: использование DOM для вставки строки в таблицу

муторное это занятие :) хотя для больших таблиц можно использовать цикл, вот упрощённый вариант:
PHP:
<HTML>
<HEAD>
<script>
function insertTR(){
	var tabl = document.getElementById('table1');
	var obj = document.getElementById('tr2');
	
	var newtr = document.createElement("tr");	
	var newtd=document.createElement("td");	
	var newtd1=document.createElement("td");

	var newtrdone = tabl.insertBefore(newtr, obj);
	var newtddone = newtrdone.insertBefore(newtd, null);
	var newtd1done = newtrdone.insertBefore(newtd1, null);

	newtddone.innerHTML="3";
	newtd1done.innerHTML="4";
}
</script>
</HEAD>

<BODY>
<table>
<tbody id="table1">
<tr id="tr1">
<td>1</td>
<td>2</td>
</tr>
<tr id="tr2">
<td>5</td>
<td>6</td>
</tr>
<tr id="tr3">
<td>7</td>
<td>6</td>
</tr>
<tr id="tr4">
<td>8</td>
<td>9</td>
</tr>
</tbody>
</table>
<input type="button" value="GO!" onClick="insertTR();" />
</BODY>
</HTML>
заметьте, что при работе с таблицами в DOM, всегда надо учитывать тег tbody, даже если его нет в хтмл коде :)
 

Alexandre

PHPПенсионер
заметьте, что при работе с таблицами в DOM, всегда надо учитывать тег tbody, даже если его нет в хтмл коде
странно, а у меня получилось без учета TBODY?
все равно - спасибо за совет ):
 

AntonN

Guest
Автор оригинала: Alexandre
странно, а у меня получилось без учета TBODY?
все равно - спасибо за совет ):
действительно странно, не должно такого быть :) в Mozille действительно символы новой строки считаются за отдельный элемент (и это создаёт гемор для кроссбраузерного кода), но вот элемент tbody в таблице обязателен и для IE, и для Оперы или я чего-то путаю?
 

Alexandre

PHPПенсионер
странно, а у меня получилось без учета TBODY?
все равно - спасибо за совет ):
еще более странно, когда я посмотрел ДОМ элементы - то тег TBODY всеже присутствует
 

AntonN

Guest
а как ты добираешься до элемента, в который надо вставлять TR? если сверху, то не должно работать, если снизу, то нет проблем - находишь ты не <table> а <tbody> :)
 

crocodile2u

http://vbolshov.org.ru
на msdn есть хорошая статья по этому поводу. поиск на мсдн - insertRow - там было и про методы объекта table, и про работу с таблицами с помощью DOM
 

Alexandre

PHPПенсионер
я добираюсь и сверху и снизу....
возможно , что из-за этого <TBODY> у меня и глючило, то я и стал добираться сверху:
PHP:
	var table = document.getElementById('Table4');
	var cnt = table.getElementsByTagName("tr");
	i = id;
    name='tr'+i;
	name2 = 'tr'+ (i+1);
	var tr = document.getElementById( name ); 
	
	if (tr.getAttribute("isOK") == "1") 
	{
	 tr.setAttribute("isOK", "0");
	 var del = document.getElementById( name+"00" ); 
	 if ( del!=null ) del.parentNode.removeChild( del );

	 return;
	};
    
    xmlhttp.Open("POST", newfile , false);
    
    xmlText = '<root><getProject id="'+id+'" /></root>';
    xmlhttp.Send(xmlText);

    xml.loadXML(xmlhttp.responseText);
    
    xsl.async = false;
    xsl.load(newfile2  );

	var tr1 = document.createElement('<tr id="'+name+'00"  >'); 
    var td2 = document.createElement("td"); 
    
    var td1 = document.createElement("<td colspan='6' class='content'>"); 

	tr1.appendChild(td2);
	tr1.appendChild(td1);
	td1.innerHTML = xml.transformNode(xsl); 
	
	if  ( cnt.item(cnt.length-1 ).getAttribute("id") == name  ) 
				tr.parentNode.appendChild( tr1 );  
	else	{
  		   var tr2 = document.getElementById( name2 ); 
		   tr.parentNode.insertBefore( tr1,tr2 ); 
		   }

	f.txt.value=table.outerHTML ;		   
	
	if ( tr.getAttribute("isOK") == null ) tr.setAttribute("isOK", '1');
	if ( tr.getAttribute("isOK") == "0" ) tr.setAttribute("isOK", '1');
-~{}~ 03.08.04 18:36:

Код:
tag.innerHTML=" bla bla bla ...."
хочет работать только при tag = createElement("td")
а мне надо было сделать innerHTML для tag = createElement("table")
НУ ни в какую не хочет
 

McLay

PHP5 BetaTeam
Alexandre
А почему бы, действительно, не использовать специальные методы для работы с таблицей? А то извращение получается.
 

Alexandre

PHPПенсионер
наверно я их не знаю ):

-~{}~ 03.08.04 18:58:

этот кусок у меня работает нормально,
а вот дерево второго уровня раскрываться не хочет
 
Сверху