Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.647 pregleda

Najnovija ↓

Zasto HTML DOM brise node iz xml-a??? 20.09.2010. u 14:03 · pre 196 meseci #1
Nije mi jasno zasto se DOM i addChild() ponasaju ovako:

Pseudo code:
Code:
var xml=loadDoc("filename");

nodes=xml.getElementsByTagName('tag');

node=searchById(nodes, 'id');  // for, childNodes,  attrib id == id...
//Prakticno node = getElementById(id);

var div document.getElementById('ekran');

div.addChild(node); // sve super, prikaze node

div.innerHtml="";  // odlicno, obrise node iz div ekrana, div bude prazan

I onda ide nebuloza:

node=searchById(nodes, 'id');  // node = null;
nodes.length == prethodna vrednost -1
Kakve veze ima HTML DOM sa ucitanim xml fajlom?
Sta tacno radi addChild()?
Sta tacno radi removeChild()?
Kako je div.innerHTML="" === xml.removeChild() ???
Gde gresim?


Na kraju sam "resio" problem ovako:
Code:
var x=node.cloneNode(true);
div.addChild(x);
Ali mi i dalje nije jasno kako i zasto bilo sta radjeno na document.body... moze da menja xml ???

Koji je onda pravilan nacin za prilazivanje i sklanjanje noda iz <div>???


Potpis
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
Re: Zasto HTML DOM brise node iz xml-a??? 20.09.2010. u 14:51 · pre 196 meseci #2
Davno sam radio nešto slično i koliko se sećam kad menjaš innerHtml browser odmah parsira tvoj HTML i menja DOM. Tako da ako staviš prazan string u innerHtml to je isto kao da si uklonio čvor sa RemoveNode(). Tada sam čitao i da nije dobro mešati ta dva načina, već treba uvek koristiti DOM traversal metode.

AddChild() samo dodaje child node roditelju, tj. child node dobija novog roditelja. Ako obrišeš taj node, on nestaje iz stabla. AddChild() ne klonira node koji dodaješ.

Ako samo treba da sakriješ node, postavi mu visibility na hidden (node.style.visibility = 'hidden').

Re: Zasto HTML DOM brise node iz xml-a??? 20.09.2010. u 17:33 · pre 196 meseci #3
Citat:
Davno sam radio nešto slično i koliko se sećam kad menjaš innerHtml browser odmah parsira tvoj HTML i menja DOM.
To mi je skroz jasno. To i zelim da se desi za HTML.

Ali mi nije jasno kako i zasto bilo kakvo brisanje u HTML DOM utice na xml node ucitan iz fajla?
Kao da addChild nekako spoji html i xml fajl. Zasto i kako se to desava?

Citat:
AddChild() samo dodaje child node roditelju, tj. child node dobija novog roditelja. Ako obrišeš taj node, on nestaje iz stabla. AddChild() ne klonira node koji dodaješ.
Hoces da kazes da kad nadjem node sa getElementsByTagName() i taj node uguram u neko DOM stablo sa addChild(node) on automatski iscupa taj node iz originalnog stabla???
Potpis
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
Re: Zasto HTML DOM brise node iz xml-a??? 20.09.2010. u 18:04 · pre 196 meseci #4
Pa da, AddChild() ne klonira čvor, ti stalno radiš sa istim čvorom. Tako da ga ti premeštaš iz jednog stabla u drugo.

Kažem ti, davno sam radio, ali nema mi mnogo smisla da se ponaša na jedan način ako radiš sa jednim stablom, a drugačije ako radiš sa XML stablom. Šta ti vraća loadDoc() metoda?
Re: Zasto HTML DOM brise node iz xml-a??? 20.09.2010. u 19:03 · pre 196 meseci
izmenjeno 1 put, poslednji put MilosDj 20.09.2010. u 19:56
  1. MilosDj20.09.2010. u 19:56zapis iz teksta poruke
#5
U lave, ovo bas nisam znao! Da potvrdim da sam dobro shvatio:

Code:
var nodes = xml.getElementsByTagName(tag);    // vraca NodeList objekat.

var node = nodes[0];    // izvucem node koji mi je potreban.

node;    //  je shortcut na node koji se i dalje nalazi u xml!!!
Mogu da saznam .nodeType .NodeValue .parentNode i ostalo.
I u tom slucaju parentNode mi daje parent iz xml.

Cool...


Ali ako uradim document.body.addChild(node); node je usao u html body. I automatski je uradjen xml.removeChild(node). Kao list koji otkines sa jednog drveta i nakalemis ga na drugo?
I parentNode bi bio div... Ok, testiram.
Citat:
edit:
Node lociran pomocu getElementByTagName iz xml-a
XML parent: [object Element]

Posto je node ubacen u html DOM sa addChld(node)
HTML parent: [object HTMLDivElement]

I dalje mi je cudno sto addChild cupa nodove iz originalnog stabla, ali sad kad znam za foru, cloneNode() cu mnogo vise upotrebljavati.




div.innerHTML=""; sam koristio za brisanje svega iz div-a.
Deluje mi mnogo brze i jednostavnije nego while(hasChildren)(.removeChild(..)). Prakticno, to je jedino mesto gde koristim innerHTML.


loadDoc(filename) vraca root node iz xml fajla. root node, sa svom decom naravno. preuzeo sam je sa w3schools.com
Potpis
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme