document.all a Opera 9
Při tvorbě složitějších javascriptových aplikací občas potřebujete vrátit všechny elementy na stránce. V jedné své aplikaci jsem (v polospánku, rauši či jiném podobném hnutí mysli) použil tuto nebezpečnou konstrukci:
prvky = document.all ? document.all : document.getElementsByTagName('*');
Co hůř, připadlo mi to jako schůdné řešení, instinkty mlčely. Praxe však ukázala své drápky o den později, když jsem aplikace testoval v různých prohlížečích. Deset jich prošlo, ten jedenáctý – Opera 9 – nikoliv. Zkušení javascripteři už si poklepávají na čelo a pro Ty méně zkušené přicházím s vysvětlením.
Ve výše uvedeném kódu testuji prohlížeč na podporu kolekce document.all, kterou představil Internet Explorer ve své čtvrté verzi a kterou také převzali mnohé konkurenční prohlížeče. Tato kolekce má obsahovat všechny prvky na stránce, ale její chování není nikterak závazně popsáno, tzn. ve specifikaci DOM ji nenajdete.
Přesto tuto kolekci podporují všechny tři nejrozšířenější
prohlížeče – Explorer, Mozilla/Firefox i Opera. Zatímco podpora
u Mozilly je tichá, dotaz if (document.all) vrací hodnotu
false, Opera se k podpoře kolekce document.all hrdě hlásí.
To znamená, že v Opeře se do proměnné prvky
v příkladu nahoře uloží prvky obsažené právě v kolekci
document.all. Zde je kámen úrazu.
Opera 9 je důsledná a v této kolekci obsahuje nejen všechny elementy (HTML, HEAD, META, SCRIPT, BODY, P atd.), ale i anonymní textové uzly. Pokud se vyznáte v DOM, víte, o čem mluvím. Pro ostatní drobné zjednodušení – tyto textové uzly se vytvoří všude tam, kde daný element obsahuje libovolná textová data. V elementu <script> jde například o zdrojový kód skriptu, v elementu <p> o text odstavce atd. Takové uzly jsou jiného typu než uzly elementů a nelze s nimi pracovat stejným způsobem, například nenabývají žádné hodnoty metody tagName, která běžně vrací jméno elementu.
Vy však chcete vrátit pouze elementy, textové uzly vás nejspíše nezajímají, proto je vám podobná kolekce k ničemu. Chcete Opeře podstrčit druhý zápis, ten s hvězdičkou a standardní metodou getElementsByTagName. Tady jsem chyboval, když jsem tuto metodu nepoužil jako výchozí. Myslel jsem až příliš na Explorer do verze 5.5, který zápis s hvězdičkou (která říká, že chci vybrat všechny elementy, jedno jakého jména) nedokázal zpracovat. Přitom se nabízí mnohem bezpečnější zápis, a to:
prvky = document.getElementsByTagName('*').length > 0 ? document.getElementsByTagName('*') : document.all;
Tento kód nejprve zjišťuje, jestli volání pomocí standardní metody
vrací nějaké elementy. Můžeme si odpustit detekci podpory metody
getElementsByTagName, protože ta je podporována už od Exploreru
5, a těžko budeme hledat starší prohlížeč, jehož uživatel by si
dobrovolně nevypnul javascript. Pokud metoda vrátí alespoň jeden element,
což v HTML dokumentu musí vrátit vždycky (jestlipak víte proč?), je
použita pro uložení elementů do proměnné prvky právě ona.
V opačném případě (IE5.5, IE5) se použije proprietální kolekce
document.all.
A to je celé kouzlo.
(Pro pokročilé javascriptaře a pro úplnost dodávám, že při práci s XML dokumenty či fragmenty dokumentů se tato metoda může krutě vymstít a skončit kritickou chybou v prohlížečích, které volání document.all vůbec neznají, v případě, že budeme pracovat s prázdným dokumentem či jeho zlomkem. V takovém případě je jedinou cestou pečlivé testování podpory jednotlivých metod a navrácených výsledků.)

Jen otazecka – k cemu je ti kolekce vsech elementu v dokumentu? Premyslim jen nad praktickym prikladem…
Chose: Znáš Cotojátka? Javascriptové tooltipy, které se mohou vázat prakticky na jakýkoliv prvek.
Procházím celý dokument a kontroluji třídy, atribut title a názvy jednotlivých prvků. Pokud dojde ke shodě s nastavením uživatele, aplikuje se na ten který prvek událost, která nastaví události onmousemove a onmouseout (zobrazení a skrytí tooltipu) a která zároveň vymaže title.
K tomu potřebuji kolekci všech prvků v dokumentu, tohle je myslím nejjednodušší způsob, jak toho dosáhnout.
Na webu není nic závazné, ale popsána je většina věcí, včetně kolekce all. Je tam napsáno, že je to kolekce elementů, Opera tedy nectí tento webový standard.
Napadá mě ještě vylepšení pro ty starší prohlížeče:
Pak by snad mohla Cotojátka fungovat i v IE4.
jen se obavam, ze tohle je krute (opravdu krute) pomale, druha vec je, ze tusim explorer ti bude stale zobrazovat klasicky (systemovy) tooltip – nepodari se mu podstrcit vymazanit title… bude ukazka? :)
2 Dero: Ano znam :) Mas pravdu, to je opravdu nepekne si hlidat veskere prvky a jak rika Kvezt, obaval bych se o vykon a pametovou narocnost.
k těm cotojátkům a kveztově dotazů – horší je myslím to, že cotojátka blbnou u opery, která zase ukazuje u všech A jejich href, nikoliv pouze title. Napadlo mě tedy jestli děláš cotojátko – pakliže je to A tak zrušit href a přidat href na onmouseon. Když sem dáš kód, tak budeme všichni vděčni
http://s5.bitefight.cz/c.php?… zmackni to PLS
The annual Guild Wars Halloween Art Contest gave players guild wars gold a chance to celebrate Halloween,guild wars style,by sharing their spookiest creative efforts.You can find the contest rules here.We received hundreds of awesome submissions.We were so impressed by both the Halloween spirit and the quality of artistic talent in our community that it was hard to buy guild wars gold
warhammer gold buy cheap wow gold aion gold
aion gold Japanese cheap wow gold ship were injured
Callaway X-22 Irons
sdfwholesale MAC Makeup Brushes</br> wholesale MAC Eyeliner</br> holesale MAC Lip gloss</br> sdfsdfhty
backpack bags handbags lady bags golf bags
replica watch
replica Rolex Milgauss
replica Louis Vuitton watches<BR
shoes:nike shoes, air jordan series,air force one,air max,nikeshox,dunk,kobe,gucci,bape,puma,adidas,timberland,prada,James,Icecream,etclong sleeve polo shirt gucci t shirt lv shirt
handbags:lv,gucci,chanel,prada,chloe,DG,juicy,hermes,balenciaga,tous,mulberry,christian dior,etc colthes/jeans:bape,bbc,Polo,lacoste,evisu,Baby,A&f,ed-hardy,lrg,hoodies,etc
“It’s like doing five million sit-ups,ALange Sohne ” Dr LookGood told me as I lay on his treatment bed and he manipulated a laser around my fat deposits. I will be uncomfortable for a couple of days but not nearly as uncomfortable as I would be doing five million sit-ups. Anyway,Vibram Fivefingers womens I leave you with a brilliant quote from Bill Maher in the Los Angeles Times: “When you look at Britney [Spears], head shaved, half-naked, drunk,Buffalo Bills crying, puking, walking into walls, crazy as a loon, remember: This is the woman, back in 2003, who said, “I think we should just trust our president in every decision he makes.” Tiffany Bangles And I think Tony Blair is a jolly good bloke…..
<p>Hi buy cheap commodity is the china wholesale usb mouse classic boots sale online china wholesale usb mouse is what you get when you don get what china wholesale Laptop Accessories cardy you want. sale commodity keeps a dear</p>
I think Tony Blair is a jolly good bloke
thank you for you share!
hollister uk
The argument for this view goes louis handbags as follows. In the beginning, human beings viewed the natural louis bag wallet forces of the world-even the
The argument for this view goes as Wholesale Accessoriesfollows. In the beginning, human beings viewed the natural forces of the world-even the
It's always nice when you can not only be informed, but also engaged! [url=http://www.abercrombiemilano.com] abercrombie and fitch [/url]
It's always nice when you can not only be informed, but also engaged! abercrombie and fitch
Well said, such a person should be a good sentence, or the future will be more rampant.I have to admit to a raisedtiffany uk eyebrow with this as wellyou love my too hah
<p>The newest style from the popular UGG Australia line of ugg boots – UGG Classic Argyle Knit Boots. These boots are very cute, and like all the Uggs very comfortable.</p>
Ugg Knightsbridge Boots at reasonable price in uggbootsdream.com. All ugg Boots knightsbridge with genuine quality and package. 110% quality guarantee! Fast&Free shipping,non sale tax!
You gave nice ideas here. I done a research on the issue and learnt most peoples will agree with your blog. Certainly, these practices are unfair; but they say that most of their rules are only to apply to people who overdraw. oil paintings discount paintings
Any good tattoo kits will also have a variety of different tips, Kawasaki ZX 12 R Fairing needles, and colors. It is not enough to have different kinds of these,Yamaha YZF600R Thundercat Fairing but also a plentiful initial supply, at least 30–50 of each is ideal. This way you won't run Suzuki GSXR600/750 Fairingout of supplies after just a few uses.
nteresting article, Funny comment. Keep it up!