Newsgroup: it.comp.lang.javascript
Titolo: cloneNode su una riga

Ciao Al click su un link, clono una riga...ma quando clicco la seconda
volta mi vengono aggiunte 2 righe e non una ...poi 8.
In pritica clono sempre con lo stesso ID.
E' possibile clonare ma ogni volta differenziare con un iD la nuova
riga? Oppure mi devo scrive uno script che "costruisce?"
BYE
Alen
function Clona(n){
	clone = document.getElementById('TRcamera').cloneNode(true);
	document.getElementById('TRcamera').appendChild(clone);
}

 }
mah, magari perche' tu quello gli dici di fare? ^^;;;
(e il bello e' che hai pure messo il parametro n alla function, ma non lo
usi!)
a occhio, credo basti sostituire document.getElementById('TRcamera') con n
in entrambe le righe...
-- 
dove il sospiro di vento brucia 
un custode di fuoco 
concepire d'inverno

 riga? Oppure mi devo scrive uno script che "costruisce?"
Ma ti serve avere ogni volta un'id diverso? Io non credo.
Cmq, se cercavi negli archivi, trovavi un bel po' di informazioni in
merito.
Tipo questo post:
http://groups.google.com/group/it.comp.lang.javascript/msg/1038686f2d3e72eb
-- 
~ "FINARMENTE LI SFRATTATI AVRANNO UN TETTO SULLA TESTA!
...però tirato ammodino, un tegolo pe' vorta.." (Il vernacoliere)

Grazie come sempre del tuo preziosissimo POST.
Ok la clonazione ho capito...e mi viene ma mi serve anche dare la
possibilità di rimuovere dinamicamente la riga creata.
Il mio dubbio è che dovrei rendere univoca la riga che creo "ID=''n+1"
function Clona(){
//mi clono la riga
clone = document.getElementById('TRcameraModel').cloneNode(true);
//Aggiungo all'ultima riga
document.getElementById('TRcamera').appendChild(clone);
}
Ora vorrei cancellare dinamicamente la riga che ho creato
<a href='#'
onClick="document.getElementById('TBLcamera').removeChild(document.getElementById(
this.id
));">elimina</a>
Ma mi da errore:
1) A parte la sintassi che canno penso...
2) Ma se non rendo univoca ogni riga con un ID teoricamente, qualora
questa sopra sia corretta (la sintassi intendo) non mi vengono
eliminate tutte dato che hanno lo stesso ID?
Quindi dal tuo esempio...se viene rimosso l'ID posso anche
immediatamente rinominarlo? Se fosse possibile avrei risolto i miei
problemi.
Sotto il codice semplificato.
Fai un copia e incolla
-------------------
il codice completo
------------------
<head>
<title></title>
<script language="JavaScript" type="text/JavaScript">
<!--
function Clona(){
clone = document.getElementById('TRcameraModel').cloneNode(true);
document.getElementById('TRcamera').appendChild(clone);
}
-->
</script>
</head>
<body>
<table width="100%"  border="0" cellpadding="0" cellspacing="0"
id="TBLcamera">
<tr>
<td class="TXTverdanaPADleft"> <strong>Tipologia camera</strong>*</td>
<td class="TXTverdanaPADleft">&nbsp;</td>
</tr>
<tr id="TRcameraModel">
<td width="250" class="TXTverdanaPADleft">
<select name="Camera" id="select"  class="TXTverdanaNero8pt">
	<option value="11">Singola Superior € 50</option>
	<option value="33">Matrimoniale Superior € 99</option>
	<option value="55">Due letti Superior € 99</option>
	<option value="77">Matrimoniale + 1 letto Superior € 129</option>
	<option value="99">Tre letti Superior € 129</option>
	<option value="121">Matrimoniale + 2 letti Superior € 139</option>
	<option value="165">Camera grossa € 200</option>
	<option value="143">4 letti Superior € 139</option>
</select>
</td>
<td class="TXTverdanaPADleft"><a href="#" title="Elimina la seguente
camera" class="UnderRed"
onClick="document.getElementById('TBLcamera').removeChild(document.getElementById(
this.id
));">[Elimina]</a></td>
</tr>
<tr id="TRcamera">
<td></td>
<td></td>
</tr>
</table>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="TXTverdanaPADleft"><a href="#" onClick="Clona();return
false;" class="UnderGreen">+ Inserisci altra camera </a></td>
</tr>
</table>
</body>
</html>
Ciao e GRAZIE

 immediatamente rinominarlo? 
Certo, ma difficilmente serve avere un id per ogni riga creata. Come ti ho
detto, per questo genere di cose si utilizza il riferimento ordinale. Anche
perché, dovendo assegnare un ID nuovo, lo faresti nella forma "myrow1",
"myrow2", "myrow3"... quindi sempre ordinale.
-- 
~ L'intelligenza artificiale non puo' battere la stupidità naturale.
(Lemma di Sullivan)

OK tutto chiaro ci sono riuscito....
-----
//********************************
// crea RIGA dinamicamente
//********************************
var n = 0; //GLOBALE
function Clona(){
n+=1;
var clone = document.getElementById('TRcameraModel0');
var newTR = clone.cloneNode(true);
	newTR.setAttribute('id','TRcameraModel'+n);
	newTR.document.getElementById('Elimina0').setAttribute("href","javascript:Elimina("+n+")");
	//alert(newTR.getAttribute('id'));
	//alert(newTR.document.getElementById('Elimina0').value);
	document.getElementById('TRcamera').appendChild(newTR);
}
//********************************
// Elimina la riga creata dinamicamente
//********************************
function Elimina(n){
	var Figlia = document.getElementById('TRcameraModel'+n);
	//alert('TRcameraModel'+n);
	if(Figlia!='TRcameraModel0'){
		var Padre=Figlia.parentNode.removeChild(Figlia);
	}
}
---------------------------
Solo una domandina...che mi viene dopo aver letto il tuo thread.
Giustamente (e non losapevo) hai fatto notare la <TR> non è figlia di
<Table> ma di Tbody. Io aggiungo le righe dopo una riga che non si vede
(id="TRcamera"):
<table id="TBLcamera">
<tr id="TRcameraModel0">>html codes</tr>
<tr id="TRcamera"></tr>
</table>
E se invece + correttamente volessi semplicemente introdurre un TR alla
fine della mia tabella (sempre come ultima riga)? Provo:
document.getElementById('TBLcamera').childNodes[0].appendChild(newTR);
Non ho provato..ho scritto ragionando su degli apopunti che ho trovato?
Ciao e Grazie

 fine della mia tabella (sempre come ultima riga)? 
L'esempio del thread che ti ho dato fa esattamente questo.
-- 
~ "Compiere l'impossibile e' impresa che risiede nel cuore degli uomini"
(Mariners and generals)