11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous !

J'ai un bug qui commence à bien m'agacer puisque ça fait 2 jours que je n'arrive pas à m'en débarrasser. J'ai bien évidemment fait des recherches pour voir si ce n'était pas un bug connu de notre ami IE, mais rien ne m'a permis d'avancer.

Je m'en remets donc à vous pour savoir si vous connaissiez des raisons pour qu'un "replaceChild" créé une erreur d'exécution iconnue sous IE (testé sur 6 et 7) ? Sous FF et Opera pas de problème.

Je vous donne le code au cas où j'aurais laissé trainer une énormité Smiley lol
(tag est une référence vers une balise html qui existe bien)

var tagTmp = document.createElement('span') ;
var papa = tag.parentNode ;
papa.replaceChild(tagTmp, tag) ;

Modifié par Sylvain71 (15 Nov 2007 - 15:04)
Bon j'ai du nouveau Smiley lol

En écrivant le message quelque chose m'est revenu à l'esprit : IE n'aime pas qu'on touche aux select.
Or ma variable "tag" est une référence vers un select ...

Je vais donc chercher dans cette direction pour voir si je trouve une solution, mais si quelqu'un en a une à m'apporter je suis toujours preneur Smiley cligne

Remarque je comprend que le replaceChild plante (enfin je comprend est un bien grand mot, mais avec IE on n'est plus à une surprise près Smiley cligne ...), mais le insertBefore là j'ai un peu plus de mal ...

En quoi le insertBefore touche le select ? ça le décale d'un noeud et c'est ce qu'IE n'aime pas ?
Bon alors en fait en essayant d'isoler le bout de code en question pour vous le montrer (il fait partie d'un gros bloc que je ne peux pas publier en public), je me suis rendu compte que mon dernier post était complètement bidon puisqu'une fois isolé : ça marche :s

Je vais donc fouiller un peu pour voir si j'arrive à mieux cerner le problème donc stand by en attendant Smiley lol
Sylvain71 a écrit :
Je vais donc fouiller un peu pour voir si j'arrive à mieux cerner le problème donc stand by en attendant Smiley lol

OK. Smiley smile

N'oublie pas de venir nous dire quelle est la solution si tu la trouves.
Je déterre ce vieux sujet car je viens de trouver la solution, donc comme il me l'avait été demandé : je l'expose Smiley cligne

Il se trouve qu'en fait le problème n'a absolument rien à voir avec ce que je croyais. Je ne sais pas ce que j'ai fait mais je l'ai vraiment très mal identifié. J'étais un peu trop concentré sur ce replaceChild et je ne me suis pas rendu compte que le problème venait d'ailleurs (certains tests m'ont vraiment laissé penser que ça venait de lui).

Donc en fait le problème était quelque chose de vraiment tout bête, plus de l'ordre xhtml que de l'ordre javascript. Je cherchais à modifier le contenu d'une balise avec innerHTML via l'arbre DOM, j'avais donc quelque chose comme ça :
this.dom.innerHTML = html ;


this.dom => noeud dom
html => chaine html
ça je pense que vous l'aviez compris Smiley cligne

C'est donc au final cette ligne qui plantait car la chaine contenait ceci :

<span class="lxpck_suggest">
    <input type="text" name="" value="Je suis un suggest" noeud="saisie" />
    <input type="hidden" name="" value="" noeud="valeur" />
    <div noeud="liste" class="lxpck_liste">
        <a href="#">Valeur 1</a>
        <a href="#">Valeur 2</a>
        <a href="#">Valeur 3</a>
    </div>
</span>


Et notre ami IE n'a pas vraiment aimé le fait de se retrouver avec un type bloc dans un type inline (div dans span). Ce qui en fait est tout à fait logique, mais bon de là à tout faire planter ... Smiley lol

Donc voila l'explication. Encore une fois désolé pour ceux qui ont cherché dans la mauvaise direction que je leur ai indiqué Smiley cligne