Newsgroup: it.comp.lang.javascript
Titolo: [?] getElementByTagName("*") e IE<6

Ho appena scoperto che getElementsByTagName("*") su versioni di IE<6
restituisce sempre una collection di length=0...
Ne siete al corrente? Esistono work-around?
Io ho scritto questa (ma mi chiedevo appunto se c'è un modo "diretto"):
window.getElementsByTagName=function(objBase,tag) {
 if(!document.all)
  return objBase.getElementsByTagName(tag==null||tag.length==0?"*":tag);
 return (tag==null||tag.length==0||tag=="*")?
  objBase.all:objBase.all.tags(tag);
} //window.getElementsByTagName
e poi uso window.getElementsByTagName anziché oggetto.getElementsByTagName
(ma è un po' antipatico...)
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 Esistono work-around?
Hai ancora molti utenti che utilizzano IE5.0/Win? Ormai è datato..
Potresti anche prendere in considerazione l'idea di supportarlo ma
solo a livello di layout, non di js.
Altrimenti potresti aggiungere un HTC tramite CSS, nel caso in cui
il browser sia IE 5.0 (tramite i commenti condizionali).
Oltre, ovviamente, all'uso di una funzione fatta ad hoc. Ma a onor
del vero, mi sembra un rovinarsi il codice inutilmente, per metter
mano ad un baco di un browser decisamente vecchio.
-- 
~ "Quando ti rifiuti di imparare una lezione in un modo, ti verrà
ripresentata
sotto un altro aspetto." (E.Caddy)

 il browser sia IE 5.0 (tramite i commenti condizionali).
azz ... lo uso in 1 punto solo, se non esiste un modo "diretto" mi sa che
mi tengo la mia window.getElementsByTagName (non ho mai lavorato con htc,
non ho molto tempo da dedicarci ora). Potrei anche aggirare la cosa
(l'oggetto in questione contiene pochi tag, quindi potrei elencarli con N
getElementsByTagName(tag), ma mi scoccia perché se aggiungo in futuro un
tag diverso poi non me lo considera)
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.

 (non ho mai lavorato con htc, non ho molto tempo da dedicarci ora).
E' banale: in pratica fai un binding tramite CSS ad un file XML, dove
risiede le definizioni ed il codice JS per i nuovi comportamenti.
Avresti qualcosa tipo:
<!--[if IE 5]>
<style type="text/css">
	* {
		behavior : url(getElementsByTagName.htc);
	}
</style>
<![endif]-->
E' banale: in pratica fai un binding tramite CSS ad un file XML, dove
L'HTC è di una sintassi imbarazzante. Nel tuo caso ci sarebbe solo da
inserire il codice JS che già hai scritto. Ma sarebbe contestuale.
Qua trovi qualche riferimento:
http://msdn.microsoft.com/workshop/components/htc/reference/htcref.asp
Personalmente tendo a evitare di usare i behavior. Ma nel tuo caso si
tratta di usarli solo in IE5.0 (e 5.5, nell'ipotesi in cui non vada).
Non scartare comunque l'object checking, se è vero che la wildcard la
usi in unico punto. E' la soluzione, in fondo, più semplice.
-- 
~ Non sono disordinato. Sono solo un massimizzatore di entropia.

 nelle attuali librerie.
fatto e confermo: length=0...
per il resto me lo tengo buono per quando avrò un attimo di tempo
(grazissime per le info)
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 (grazissime per le info)
De nada.
-- 
~  "Nei  film americani, qualsiasi problema che  venga considerato
 sufficientemente catastrofico, puo' essere risolto facendo esplodere
uno o piu' ordigni nucleari" (ZER0  & Cosimo)