Starší komentáře ke článku: Programujeme DHTML aplikace - dokument

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 9.10.2002 1:46:13

Ten skrip sa mi nezda...
Uz davnejsie som si spravil podobny skript (<a href='http://quax.kmit.sk/work/dom-test/)' target='_blank'>http://quax.kmit.sk/work/dom-test/)</a> ktory vrati ine vysledky Mozilla 1.2 (v zatvorke je vysledok z implemetation.html):
XML: YES (NO)
HTML: YES (YES)

Core: YES (NO)
XML: YES (YES)
HTML: YES (YES)
Views: YES (NO)
StyleSheets: YES (NO)
CSS: YES (NO)
CSS2: YES (NO)
Events: YES (NO)
UIEvents: NO (NO)
MouseEvents: YES (NO)
MutationEvents: NO (NO)
HTMLEvents: YES (NO)
Range: YES (NO)
Traversal: NO (NO)

Core: NO (NO)
XML: NO (YES)
Events: NO (YES)
UIEvents: NO (NO)
MouseEvents: NO (NO)
TextEvents: NO (NO)
MutationEvents: NO (NO)
HTMLEvents: NO (NO)
LS: NO (NO)
AS-EDIT: NO (NO)
XPath: YES (NO)

Pricom vystup z mojho skriptu zodpoveda skutocnosti. Co sa da vlmi lahko overit aj v JAvascript konzole.

Avatar

Autor komentáře: IE6.0

Datum vložení: 9.10.2002 10:50:24

Skutečně je tomu tak, že IE6.0 nezvládá nic kromě HTML v DOM1? Jinak mi totiž oba scripty vyhodily false (NO). Nemyslím si, že bych některé věci nemohl použít, ale asi to dělám špatně. :-) Čau

Avatar

Autor komentáře: Michal Kusyn

Datum vložení: 9.10.2002 11:28:21

FALSE znamena i treba 99% procetni podporu. Ale neni to 100%, tudiz podle W3C nemuze hodnota nabyvat true.

Avatar

Autor komentáře: Michal Kusyn

Datum vložení: 9.10.2002 11:25:50

Chybicka se vloudila, je tam nekorektne pouzita promena. Opraveny script je na <a href='http://susex.osu.cz/~xkusyn/implement.htm' target='_blank'>http://susex.osu.cz/~xkusyn/implement.htm</a>, popripade na vasi adrese, ktery je resen obdobne.

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 9.10.2002 2:02:48

ad class:
v IE pre nastavenie je mozne pouzit len Node::className funkcia Node::setAttribute() je bez efektu

ad childNodes: nieje to pole ale kolekcia. Rozdiel je v pristupe k prvkom:
pole: pole[i]
kolekcia: kolekcia.item(i)
Druha vec je ze niekde funguje aj pristup ako k polu. Lepsie je pouzivat Node.childNodes.item(i) pre pristup k i-temu prvku.

ad Model dokumetu:
pri kode:
[DIV id=d1]
[DIV id=d2] TEXT [/DIV]
[DIV id=d3] TEXT [/DIV]
[/DIV]

Skutocny model v DOMe bude vyzerat takto:

Element: [DIV id=d1]
TextNode: [koniec_riadku + medzery]
Element [DIV id=d2]
TextNode: [TEXT]
TextNode: [koniec_riadku + medzery]
Element [DIV id=d2]
TextNode: [TEXT]
TextNode: [koniec_riadku + medzery]

IE vsak vynechava textove Nody ktore obsahuju white-spaces, Mozilla nie. Na tuto vec sa zabuda v celej casti. Ak sa to niekomu zda ako banalne tak nech skusi porozmislat co sa stane ak sa DIVu s id=d1 nastavy CSS vlastnost white-space: pre;

Avatar

Autor komentáře: Michal Kusyn

Datum vložení: 9.10.2002 16:09:06

Ano, NodeList je typ colection a spravne by se melo pristupovat pres item. Polem jsem spise minil obecnou strukturu typu repetice, ale uznavam ze je to zavadejici.

Co se tyce struktury popisoval jsem obecny princip. White-space, se zabyvam pozdeji pri praci s textovymi uzly a inner metodami. Priznam se nevim, zda-li je zpusob jakym se chova mozilla (tzn. novy #text i pro white-space) podle W3C spravny, nic takoveho jsem v dokumentech nenasel. Banalni to rozhodne neni, take mi tento rozdil pusobi problemy, zvlaste kdyz nejde o syntaktikou chybu a tezko se odhaluje. Diky za podnetnou pripominku.:)

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 9.10.2002 17:17:47

Cele je to asi komplikovanejsie, zalezi ci pouzity parser je XML alebo iny a potom ci je validujuci alebo nie. (alebo ci je to vobec parser kompatibilny s predchadzajucimi :))

Ak je to XML parser tak ten este musi robit normalizaciu koncov riadkov.
XML parser pouziva na ukoncenie riadku iba LF. CRLF a samostatne CR nadhradzuje LF.

Dalej je dolezite ci sa white-spaces nachadzaju v znackovani: <a href=""> je to iste ako <a href="">.

Ak su medzery v obsahu elementu napr:
[osoba]
[meno]Jozo[/meno]
[prezvisko]Kovac[/priezvisko]
[/osoba]

Prave v tom to momente zacina gulas :)
1) ak je parser validujuci tak podla DTD alebo XML schema vie zistit ci medzery su sucastou dokumentu alebo nie

[!ELEMENT osoba (meno, priezvisko)]
[!ELEMENT meno (#PCDATA)]

prvy element moze obsahovat len elementy meno a priezvisko a ak obsahuje white-spaces potom su ignorovatelne. Parser to vsak povie aj aplikacii ktora spracuvava dokument. Aplikacia sa potom moze rozhodnut ako dalej.

2) nevalidujuci parser nevie co s tym, preto sa pouziva standalone="no" cim sa docieli toho ze parser s nebude snazit tvarit inteligentne. Takto vzniknu "divne" textove uzly.

Ale ja tak je problem napriklad s takouto konstukciou:
[para][abbr] XML [/abbr] je super.[/para]
[para] a [abbr] su typu #PCDATA a nastava problem s medzerami okolo tagu [/abbr]

S tymto problemom suvisi zachovavanie/skracovanie white-spaces. Pomocou atrbutu xml:space sa da urcit ci sa white-spaces ponechaju alebo sa zredukuju na jednu medzeru.

Jedna vec je dolezita: standart XML sa white-spaces nezaobera, lebo prdpoklada ze ich vyznam sa bude pre kazdu aplikaciu rozny.

Je dost tazke povedat ktory browser to roby dobre alebo zle. Myslim si ze Mozilla je na tom lepsie.

Ak IE pouziva parser na spracovanie HTML potom je "celkom v poriadku" ze odstranuje white spaces a nechava ich len pri [pre] a spol tu problem nieje. Ale ak to iste roby aj pri XML dokumentoch tak si myslim ze robi chybu.

Mozilla je presne na opak :). Pri XML sa psrava tak ako ma (nechava textove uzly). Ale ak je to HTML je jasne ze kde maju/nemaju byt white-spaces. Pokial sa nepouzije CSS, alebo style.whiteSpace.

Ale co ak niesu tieto dva parsery validujuce???.

Preto radsej som radsej nech tam je vsetko (ako je to v Mozille, ktora tam nedava uzly typu Entity, EntityReference ktore su tam uz rovno preparsovane ).

Avatar

Autor komentáře: Vilda Kužel

Datum vložení: 9.10.2002 11:28:45

<I>Vrací: referenci na element span s attributem id='div1';</I>
...Nemělo by tam být spíš: "<B>Vrací: referenci na element div s attributem id='div1';</B>"

Avatar

Autor komentáře: Roman Pichlík

Datum vložení: 10.10.2002 7:41:55

No docela ste me potesil technicka uroven clanku neni spatna jen bych mel par poznamenek. Opravte si Javaskript na JavaScript nebo vubec nebudte zavadejici, protoze IE zadny JavaScrip nema ma JScrip proto pouzivejte ECMAScript. Dale DOM neni jen rozhrani pro praci s html strankami, ale obecne API, ktere se pouziva hlavne pro praci s XML dokumenty oproti DOMu se jeste vyuziva jedno rozhrani a to SAX. Takze vztahovat ho jenom na prohlizec je zavadejici. DOM i SAX pouzivaji programy, ktere jsou funkcnosti nahony vzdaleny prohlizecum. Nevim jestli dobre chapete pojem interface DOM sam o sobe, zadne funkce nema ani vlastni API. DOM je pouze abstrakt, ktery definuje pouze metody jejich atributy a navratove typy a o vlastni implmentaci interfacu se stara ten kdo ho implementuje.

Zpět na článek | Úvodní stránka Interval.cz