11548 sujets

JavaScript, DOM et API Web HTML5

Salut !

Petite question qui peut paraitre bête mais qui me prend la tête pour pas grand-chose.

D'après le W3C et la doc de Mozilla, les fonctions de types getElementsBy* sont censés renvoyer des NodeList.

Lorsque je test sur Firefox 3 (document.getElementsByTagName('*') instanceof NodeList), ça me renvoi faux. En revanche, j'ai découvert que document.getElementsByTagName('*') instanceof HTMLCollection renvoyait vrai, laissant entendre que ces listes héritent de l'objet HTMLCollection.

Hors, quand je modifie le prototype de HTMLCollection, les objets renvoyés par les fonctions n'héritent pas des modifications. Idem lorsque je modifie le prototype de NodeList. J'ai également essayé avec NamedNodeMap sans succès.
Les listes renvoyés par Chromium, en revanche, héritent bien des modifications du prototype de NodeList (j'ai pas essayé sous Opera).

La question est donc de savoir quel est l'objet dont je dois modifier le prototype pour étendre les objets renvoyés par les fonctions getElementsBy* sous Firefox ?

Merci ^^
Salut,

Pourquoi ne pas ré implémenter getElementsByTagName pour qu'il retourne une NodeList?
Avec childNodes et hasChildNodes un peu de récursivité cela devrai marcher.
J'y ai pensé mais les NodeList n'ont pas de constructeur (ou alors, il est bien caché mais vu qu'il faut passer par des fonctions pour créer des noeuds...). Donc difficile d'en instancier. Et puis les fonctions DOM natives sont déjà suffisamment lourdes pour ne pas les remplacer par des fonctions similaire en JS.

Accessoirement, après test, Opera (au moins depuis la 9.64) renvoi bien une NodeList aussi. Et quand à IE8, il renvoi également un HTMLCollection (comme Firefox) mais supporte bien la modification de son prototype (contrairement à Firefox).

Manque que Firefox Smiley decu