2010-06-04 6 views
1

Cela se produit dans Firefox, mais pas dans Google Chrome.document.createElement() crée une balise non fermée?

Je crée une balise SVG 'Image' dans une toile svg Web comme ceci:

im = document.createElementNS(svgns, 'image'); 
im.setAttributeNS(xlinkns, 'href', g.href); 
canvas.appendChild(im); 

Et si je regarde dans Firebug ou le débogueur de chrome, le svg apparaît auto-fermée comme ceci:

<image xlink:href="..." /> 

Mais si je puis imprimer le parent de innerHTML de l'élément svg, il retourne ceci:

<svg><image xlink:href="..."></svg> 

Notez que la balise d'image est maintenant fermée, ce qui provoque des erreurs sur la ligne. Ai-je découvert un bug, ou est-ce que je fais quelque chose de mal? Et, probablement beaucoup plus difficile, y a-t-il un moyen en JavaScript pour vérifier et réparer le tag?

Répondre

0

HTML ne nécessite pas de balise vide pour avoir une fermeture de fin. Même si le document était en XHTML, je ne suis pas sûr qu'il renvoie un code XML valide de la propriété innerHTML.

Modifier: Mozilla Developer Center documentation for innerHTML dit que vous ne devriez pas dépendre de ce que vous obtenez de l'innerHTML et suggère certaines bibliothèques en remplacement spécifiquement pour une utilisation avec XML.

+0

Je suis au courant. Pourtant, il apparaît dans la visionneuse HTML de la première façon, et l'implémentation par défaut ne devrait-elle pas être la bonne? Si cela est prévu, cela ne signifie-t-il pas que les méthodes DOM javascript ne fonctionnent pas vraiment pour XHTML? – colinmarc

+0

La façon dont l'outil l'affiche n'implique en rien la façon dont les données sortiront de innerHTML. Firebug est un projet complètement séparé de Firefox. Qu'est-ce que vous voulez réellement accomplir? Voulez-vous confirmer si c'est un bug? Voulez-vous faire quelque chose avec les données de innerHTML? Ce n'est pas que innerHTML génère une balise non fermée, c'est que HTML ne nécessite pas que /> il ne l'autorise pas, donc Firefox fournit un code HTML valide à partir de sa propriété innerHTML. – lambacck

+0

votre édition m'a conduit au paquet innerDom, qui est ce que je veux, je pense. Merci – colinmarc

Questions connexes