Newsgroup: it.comp.lang.javascript
Titolo: svg in a html file con script

Salve a tutti :
I ho questo file html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<embed src="primo.svg" width="2000" height="2000" type="image/xml+svg">
</BODY>
</HTML>
ed il mio file  primo.svg è :
<svg id="azzo" width="20000" height="20000"
xmlns="
http://www.w3.org/2000/svg
"
xmlns:xlink="
http://www.w3.org/1999/xlink
">
<script type="text/javascript">
function ciaoooo(evt)
{
	var dd = evt.target.getAttribute('id')
	dd = document.getElementById(dd)
	var xx = dd.getAttribute("x")
	var yy = dd.getAttribute("y")
	xx = parseInt(xx)
	xxx = parseInt("20")
	xx = xx + xxx
	var dd = evt.target.getAttribute('id')
	dd = dd+"blocco"
	dd = document.getElementById(dd)
	alert(dd.childNodes.length)
	for(vis = 0;vis &lt; dd.childNodes.length;vis++)
	{
		var figlio = dd.childNodes[vis];
		alert(figlio)
		var appoggio = figlio.getAttribute("id")
		alert(appoggio)
		figlio = document.getElementById(appoggio);
		if(appoggio.substring(0,11)== "goccurrence")
		{
			alert("cazzz")
			yy = parseInt(yy)
			yyy = parseInt("15")
			yy = yy + yyy
			var figlio2 = dd.childNodes[vis].childNodes[0];
			figlio2 = figlio2.getAttribute("id")
			figlio2 = document.getElementById(figlio2);
			figlio2.setAttribute('x',xx);
			figlio2.setAttribute('y',yy);
			figlio2.setAttribute('visibility','visible');
			yy = parseInt(yy)
			yyy = parseInt("5")
			yy = yy + yyy
			continue;
		}
		if(figlio.tagName == "text")
		{
			yy = parseInt(yy)
			yyy = parseInt("15")
			yy = yy + yyy
			figlio = figlio.getAttribute("id")
			figlio = document.getElementById(figlio);
			figlio.setAttribute('x',xx);
			figlio.setAttribute('y',yy);
			figlio.setAttribute('visibility','visible');
			yy = parseInt(yy)
			yyy = parseInt("5")
			yy = yy + yyy
			continue;
		}
		 if(figlio.tagName == "rect")
		{
			figlio.setAttribute('x',xx);
			figlio.setAttribute('y',yy);
			figlio.setAttribute('visibility','visible');
			continue;
		}
	}
}
/*questa funzione cancella le occorrenze di un determinato topic*/
/*questa funzione cancella le occorrenze di un determinato topic*/
function ciaoooo1(evt)
{
var dd = evt.target.getAttribute('id')
dd = dd+"blocco"
dd = document.getElementById(dd)
for(vis = 0;vis &lt; dd.childNodes.length;vis++)
{
var figlio = dd.childNodes[vis];
if(figlio.tagName == "rect" || figlio.tagName == "text")
{
	figlio = figlio.getAttribute("id")
	figlio = document.getElementById(figlio)
	figlio.setAttribute('visibility','hidden');
	continue;
}
if(dd.childNodes[vis].childNodes.length == 1 &amp;&amp;  vis%2 != 0)
{
	var figlio2 = dd.childNodes[vis].childNodes[0];
	figlio2 = figlio2.getAttribute("id")
	figlio2 = document.getElementById(figlio2);
	figlio2.setAttribute('visibility','hidden');
	continue;
}
}
}
function lacher(evt)
{}
function bouger(evt)
{}
function cliquer(evt)
{}
function double_click(evt)
{}
</script>
												<g onmouseup="lacher(evt)" opacity="1">
												<g id="element" onmousemove="bouger(evt)"
onmousedown="cliquer(evt)" onclick="double_click(evt)"><circle id="a"
fill="LawnGreen" stroke="black" cx="384" cy="239" r="30"
fill-opacity="1" d="M354 209 l60 0 0 60 -60 0z"/><text id="texta"
x="384" y="239" fill="black" font-size="18"
font-family="times">a</text><image xlink:href="at.png" id="occurrencea"
x="384" y="264" width="20" height="20" onclick="ciaoooo(evt)"
onmouseover="ciaoooo1(evt)"/><g id="occurrenceablocco"><rect
id="occurrenceaRect0" fill="white" stroke="blue" width="150"
height="20" visibility="visible" x="404" y="264"/><text
id="occurrenceatext0" x="404" y="279" width="90" visibility="visible"
fill="black" font-size="14" font-family="times">matricola :
saasas</text></g><circle id="saasas" fill="LawnGreen" stroke="black"
cx="41" cy="274" r="30" fill-opacity="1" d="M11 244 l60 0 0 60 -60
0z"/><text id="textsaasas" x="41" y="274" fill="black" font-size="18"
font-family="times">saasas</text><image xlink:href="at.png"
id="occurrencesaasas" x="41" y="299" width="20" height="20"
onclick="ciaoooo(evt)" onmouseover="ciaoooo1(evt)"/><g
id="occurrencesaasasblocco"><rect id="occurrencesaasasRect0"
fill="white" stroke="blue" width="150" height="20" visibility="visible"
x="61" y="299"/><a xlink:href="
http://www.libero.it
"
id="goccurrencesaasascartel0" target="_blank" visibility="hidden"><text
id="occurrencesaasastext0" x="61" y="314" width="90" fill="black"
font-size="14" font-family="times"
visibility="visible">sito_web</text></a></g><circle id="sdsds"
fill="LawnGreen" stroke="black" cx="566" cy="193" r="30"
fill-opacity="1" d="M536 163 l60 0 0 60 -60 0z"/><text id="textsdsds"
x="566" y="193" fill="black" font-size="18"
font-family="times">sdsds</text><image xlink:href="at.png"
id="occurrencesdsds" x="566" y="218" width="20" height="20"
onclick="ciaoooo(evt)" onmouseover="ciaoooo1(evt)"/><g
id="occurrencesdsdsblocco"><rect id="occurrencesdsdsRect0" fill="white"
stroke="blue" width="150" height="20" visibility="visible" x="586"
y="218"/><a xlink:href="
http://www.libero.it
"
id="goccurrencesdsdscartel0" target="_blank" visibility="hidden"><text
id="occurrencesdsdstext0" x="586" y="233" width="90" fill="black"
font-size="14" font-family="times"
visibility="visible">foto</text></a><rect id="occurrencesdsdsRect1"
fill="white" stroke="blue" width="150" height="20" visibility="visible"
x="586" y="238"/><text id="occurrencesdsdstext1" x="586" y="253"
width="90" visibility="visible" fill="black" font-size="14"
font-family="times">numero_di_abitanti : dsdsds</text></g><circle
id="sddssddssd" fill="LawnGreen" stroke="black" cx="199" cy="268"
r="30" fill-opacity="1" d="M169 238 l60 0 0 60 -60 0z"/><text
id="textsddssddssd" x="199" y="268" fill="black" font-size="18"
font-family="times">sddssddssd</text><image xlink:href="at.png"
id="occurrencesddssddssd" x="199" y="293" width="20" height="20"
onclick="ciaoooo(evt)" onmouseover="ciaoooo1(evt)"/><g
id="occurrencesddssddssdblocco"><rect id="occurrencesddssddssdRect0"
fill="white" stroke="blue" width="150" height="20" visibility="visible"
x="219" y="293"/><text id="occurrencesddssddssdtext0" x="219" y="308"
width="90" visibility="visible" fill="black" font-size="14"
font-family="times">codice_fiscale : dssddsds</text><rect
id="occurrencesddssddssdRect1" fill="white" stroke="blue" width="150"
height="20" visibility="visible" x="219" y="313"/><a
xlink:href="
http://www.libero.it
" id="goccurrencesddssddssdcartel1"
target="_blank" visibility="hidden"><text
id="occurrencesddssddssdtext1" x="219" y="328" width="90" fill="black"
font-size="14" font-family="times"
visibility="visible">esercizio</text></a></g><ellipse id="xsccscs 1"
fill="red" stroke="black" cx="369" cy="46" rx="70" ry="20" d="M299 26
l140 0 0 40 -140 0z"/><text id="textxsccscs 1" x="369" y="46"
fill="black" font-size="18" font-family="times">xsccscs</text><rect
id="sdddsdsds 1" fill="LightBlue " stroke="black" x="491" y="91"
width="46" height="46" fill-opacity="1" d="M491 91 l46 0 0 46 -46
0z"/><text id="textsdddsdsds 1" x="511" y="116" fill="black"
font-size="18" font-family="times">sdddsdsds</text><line id="xsccscs
1sdddsdsds 1" x1="369" y1="46" x2="511" y2="116" stroke="red"
stroke-opacity="0.2" fill-rule="evenodd" stroke-width="3"/><line
id="sdddsdsds 1 sdsds" x1="511" y1="116" x2="566" y2="193" stroke="red"
stroke-opacity="0.2" fill-rule="evenodd" stroke-width="3"/><rect
id="sddssdsd 1" fill="LightBlue " stroke="black" x="357" y="100"
width="46" height="46" fill-opacity="1" d="M357 100 l46 0 0 46 -46
0z"/><text id="textsddssdsd 1" x="377" y="125" fill="black"
font-size="18" font-family="times">sddssdsd</text><line id="xsccscs
1sddssdsd 1" x1="369" y1="46" x2="377" y2="125" stroke="red"
stroke-opacity="0.2" fill-rule="evenodd" stroke-width="3"/><line
id="sddssdsd 1 a" x1="377" y1="125" x2="384" y2="239" stroke="red"
stroke-opacity="0.2" fill-rule="evenodd" stroke-width="3"/><ellipse
id="dssddsdsd 3" fill="red" stroke="black" cx="139" cy="40" rx="70"
ry="20" d="M69 20 l140 0 0 40 -140 0z"/><text id="textdssddsdsd 3"
x="139" y="40" fill="black" font-size="18"
font-family="times">dssddsdsd</text><line id="dssddsdsd 3a" x1="139"
y1="40" x2="384" y2="239" stroke="red" stroke-opacity="0.2"
fill-rule="evenodd" stroke-width="3"/><rect id="sdsdsd 3"
fill="LightBlue " stroke="black" x="33" y="120" width="46" height="46"
fill-opacity="1" d="M33 120 l46 0 0 46 -46 0z"/><text id="textsdsdsd 3"
x="53" y="145" fill="black" font-size="18"
font-family="times">sdsdsd</text><line id="dssddsdsd 3sdsdsd 3"
x1="139" y1="40" x2="53" y2="145" stroke="red" stroke-opacity="0.2"
fill-rule="evenodd" stroke-width="3"/><line id="sdsdsd 3 saasas"
x1="53" y1="145" x2="41" y2="274" stroke="red" stroke-opacity="0.2"
fill-rule="evenodd" stroke-width="3"/><rect id="dsfsf 3"
fill="LightBlue " stroke="black" x="164" y="122" width="46" height="46"
fill-opacity="1" d="M164 122 l46 0 0 46 -46 0z"/><text id="textdsfsf 3"
x="184" y="147" fill="black" font-size="18"
font-family="times">dsfsf</text><line id="dssddsdsd 3dsfsf 3" x1="139"
y1="40" x2="184" y2="147" stroke="red" stroke-opacity="0.2"
fill-rule="evenodd" stroke-width="3"/><line id="dsfsf 3 sddssddssd"
x1="184" y1="147" x2="199" y2="268" stroke="red" stroke-opacity="0.2"
fill-rule="evenodd" stroke-width="3"/></g>
</g>
</svg>
Purtroppo ottengo questo tipo di errore .
'tagName' è nullo o non è un oggetto'
Come posso risolvere il problema?

Come posso risolvere il problema?
Con Firefox funziona.
Il problema e' qui:
var figlio = dd.childNodes[vis];
ed in tutti gli altri casi di accesso all'Array childNodes[xxx]
prova a sostituire con
var figlio = dd.childNodes.item(vis);
(nota che lo devi cambiare piu' volte)
e cosi' funziona.
Inoltre la porzione:
	figlio = figlio.getAttribute("id")
	figlio = document.getElementById(figlio)
	figlio.setAttribute('visibility','hidden');
	continue;
e' un giro inutile. si puo' benissimo togliere le prime due righe.
Comunque mi pare un po' tutto incasinato. Lavorandoci un po' si
ripulisce e dovrebbe funzionare.
--
mg

 ed in tutti gli altri casi di accesso all'Array childNodes[xxx]
Perché non si tratta di un array, ma di una collection.
Generalmente è possibile accedere alle collection anche nella forma di array;
ma evidentemente le API che gestiscono gli elementi SVG in IE non hanno questa
possibilità, che invece sussiste per le API HTML e XML. Insomma, giusto per un
po' di confusione in più.
-- 
~ "Lo dice il buon senso, ma il buon senso non è uno standard".
(Jeffrey Zeldman)

po' di confusione in più.
Grazie per la precisazione tecnica.
Un nodo SVG non e' altro che un nodo, pero'. Forse la colpa e', in
questo caso, dell'AdobeSVG Viewer. L'accesso a js (o l'interpretazioe,
passami questa sperando che tu capisca quello che voglio dire)
avviene a livello di browser e del viewer?
Ad esempio su IE per Mac il viewer di Adobe ignora il js.
Meno male che ora c'e' quel miracolo di FireFox!
saluti

 avviene a livello di browser e del viewer?
Entrambi, IMVHO.
-- 
~ "L'arte non riproduce cio' che e' visibile,ma rende visibile cio' che
non sempre lo e'" (Paul Klee)