11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

désolé, il semble qu'un fil existe déjà (http://forum.alsacreations.com/topic-4-17569-1-Styles-ignors-aprs-import-XHTML-AJAX.html), mais il est clôt.

voilà mon problême :
j'essaye d'insérer un fragment dom dans mon document, mais les styles du documents ne sont pas appliqués à ce bout de code ajouté...

(...)
var fragment = xsltProcessor.transformToFragment(xml, document);
var node = document.createElement('div');
node.appendChild( fragment);
formNode.parentNode.replaceChild( node , formNode );
(...)


Le style n'est pas pris en compte ;
debug :
- si je crée un noeud "fragment" de toute pièce, les styles sont correctement appliqués. Si j'insère un bout de code en innerHTML, ça marche aussi. (au fait, y a t il un moyen simple de convertir un noeud dom en texte ?)
- si je récupère un document plutôt qu'un fragment, que je récupère la racine de ce document et que je l'insère, ça ne marche pas non plus.
- j'ai essayé de refaire explicitement un import : document.importNode(fragment, true); ou de prendre le noeud racine de mon fragment, mais sans succès.

je suis à cours d'idée, là... Smiley smile

merci, en tout cas, à tous ceux qui voudront bien jeter un coup d'oeil...
Modifié par lex (06 Dec 2007 - 13:20)
Précision : il semblerait que seuls les styles identifiés par la classe ne soient pas appliqués. par exemple le style css span{} est appliqué mais pas le style span.classe{} ; en vérifiant que mon fragment contient bien les attributs de classe, je m'aperçois : qu'un getAttribute('class') me renvoie bien la classe, mais qu'un className me retourne undefined... le problême viendrait donc de là...

faut-il mettre à jour le dom après une insertion pour qu'il prenne en compte les nouveaux attributs class ? si oui comment ?
ou suis-je obligé de rajouter les classes à la main sur tous les noeuds... ( setAttribute('class', getAttribute('class')) )
Modifié par lex (03 Dec 2007 - 12:14)
Bon, en desespoir de cause, j'ai feinté :

plutot que d'insérer mon noeud fragment proprement, je le serialise, et je copie le string dans un innerHTML de mon noeud conteneur, et... ça marche :|

ce qui m'oblige à une instruction aussi absurde que :
node.innerHTML = node.innerHTML, où node est le noeud

je récapitule : mon noeud importé insérée dans le dom de mon document => les attributs class ne sont pas considérés comme tel.
le même noeud sérialisé (innerHTML) inséré dans le dom de mon document => les style css sont correctement appliqués. Si qqu'un a une expliquation...
Salut,

Je suppose que le problème se poserait aussi pour les ids ?

Peut-être que le paramètre "xsl:output" n'a pas la bonne valeur ?
Julien Royer a écrit :
Salut,

Je suppose que le problème se poserait aussi pour les ids ?

Peut-être que le paramètre "xsl:output" n'a pas la bonne valeur ?



Pour les id, je suppose que c'est le même problème, sans avoir pour autant testé.

quand à l'output, voilà l'en-tête de ma feuille de style xslt :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:tei="http://www.tei-c.org/ns/1.0">
	<xsl:output method="xml" indent="yes" encoding="UTF-8"/>


peut-être dois-je remplacer method="xml" par method="xhtml" ?