& lt; pré & gt; tag perd les sauts de ligne lors de la définition de innerHTML dans IE
Je suis en utilisant le Prototype du PeriodicalUpdater pour mettre à jour un div avec les résultats de l'appel ajax. Si je comprends bien, la div est mise à jour par l'établissement de ses innerHTML.
La div est enveloppé dans un <pre>
tag. Dans Firefox, la <pre>
formatage fonctionne comme prévu, mais sous IE, le texte se termine sur une seule ligne.
Voici un exemple de code trouvé ici qui illustre bien le problème. Dans Firefox, abc
se trouve sur une autre ligne que def
; dans IE c'est sur la même ligne.
<html>
<head>
<title>IE preformatted text sucks</title>
</head>
<body>
<pre id="test">
a b c
d e f
</pre>
<script type="text/javascript"><!--
var textContent = document.getElementById("test").innerText;
textContent = textContent.replace("a", "<span style=\"color:red;\">a</span>");
document.getElementById("test").style.whiteSpace = "pre";
document.getElementById("test").innerHTML = textContent;
--></script>
</body>
</html>
Quelqu'un connais un moyen de contourner ce problème?
source d'informationauteur MCS
Vous devez vous connecter pour publier un commentaire.
Réglage innerHTML les feux d'un analyseur HTML, qui ignore les espaces en trop, y compris des retours. Si vous changez votre méthode pour inclure le <pre> tag dans la chaîne, il fonctionne bien parce que l'analyseur HTML conserve les retours dur.
Vous pouvez le voir en action en faisant une Vue Source Généré après l'exécution de votre page d'exemple:
Vous pouvez voir ici que le retour n'est plus une partie du contenu de la <pre> tag.
ou vous pourriez
En général, vous obtiendrez des résultats plus cohérents en utilisant les méthodes du DOM pour construire un contenu dynamique, surtout quand vous vous souciez de choses subtiles, comme la normalisation de l'espace. Toutefois, si vous êtes fixés sur l'utilisation de innerHTML pour cela, il y a un IE solution, qui consiste à utiliser le
outerHTML
attribut, et inclure le bloc à l'intérieur des balises.Cette solution de contournement et plus de discussion peuvent être trouvés ici: L'insertion d'un saut de ligne dans un pré tag (IE, Javascript)
Ne sais pas si cela a été suggéré précédemment, mais la solution que j'ai trouvé pour la conservation des espaces, retours à la ligne, etc lorsque vous faites un innerHTML dans un " pré "tag consiste à insérer un autre" pré " de la balise dans le texte:
Semble I. E. n'a analyser le texte avant de faire le innerHTML. Ci-dessus les causes de l'analyseur de laisser le texte à l'intérieur de la plus " pré " tag unparsed. De sens puisque c'est ce que l'analyseur est censé faire. fonctionne également avec les FF.
Il pourrait également être réécrit "le Python chemin", c'est à dire: