une - javascript innertext




.InnerHTML Ne fonctionne pas correctement dans Internet Explorer (7)

<link> ne peut être contenu que dans <head> .

Cet élément définit un lien. Contrairement à A, il peut apparaître uniquement dans la section HEAD d'un document, bien qu'il puisse apparaître plusieurs fois.

référence: http://www.w3.org/TR/html401/struct/links.html#edef-LINK

Je voulais attribuer une balise de liaison à innerHTML d'un contrôle HTML. Mais cela ne fonctionne pas correctement dans Internet Explorer. Toutefois, lorsque j'essaie d'assigner autre chose que des balises <link> & <style> cela fonctionne très bien.

<html>
<head>
<script type="text/javascript">
function getValue()
  {
  var x=document.getElementById("myHeader");
  x.innerHTML='<link \"http://test.com/css/template.css\" rel=\"stylesheet\"><div>abc</div>';
  alert(x.innerHTML);
  }
</script>
</head>
<body>

<h1 id="myHeader" onclick="getValue()">Click me!</h1>

</body>
</html>

En outre, si je change la séquence de la <div> et de la balise <link> ci-dessus, cela fonctionne également dans Internet Explorer.

x.innerHTML='<div>abc</div><link \"http://test.com/css/template.css\" rel=\"stylesheet\">';

Veuillez suggérer! Merci.

EDIT: Ceci est un bug dans Internet Explorer avec ExtJs. Plus d'informations à

http://www.sencha.com/forum/showthread.php?30110-internet-explorer-autoLoad-css-not-applied


Je pense que le problème est que le <link> doit être un élément vide. changez votre code pour ceci:

x.innerHTML='<link \"http://test.com/css/template.css\" rel=\"stylesheet\" /><div>abc</div>';
                                                     // this is the trick ^^^

EDIT: je n'ai pas testé cela, mais c'est la première chose qui me fait mal aux yeux.

EDIT2: les balises <link> ne doivent apparaître que dans la section <head> ... j'espère que vous savez ce que vous essayez de faire.


au texte réglé correctement, je vous recommande d'aller ce que je fais généralement. si vous avez ie 8 alors ouvrez le html dans ie. appuyez sur f12 pour afficher l'outil de développement. maintenant dans la nouvelle fenêtre aller à l'étiquette de script. définir le point de rupture à partir de l'endroit où votre javascript commence. maintenant appuyez sur le bouton démarrer le débogage. exécutez la fonction js à partir de votre événement ou de la façon dont il s'exécute. maintenant sur l'objet dans la fonction javascripg, lorsque le point d'arrêt frappe, faites un clic droit et ajouter la montre. Développez l'objet et voyez où se trouvait votre texte précédent et où est votre nouveau texte.


Qu'est-ce que vous essayez exactement d'atteindre, en tant qu'objectif final? Comme dit précédemment, une balise de lien ne devrait apparaître que dans la <head> d'un document html.

JavaScript peut être une chose délicate dans sa saveur vanille, il vaut mieux utiliser un framework, mon favori personnel est MooTools bien que j'aie entendu dire que JQuery est plutôt bon, mais MooTools a des OOP (pour les vrais programmeurs - tehe).

Cela vous permettra de faire beaucoup plus, et probablement atteindre votre objectif final, si vous me le faites savoir, vous devriez obtenir une réponse plus directe à votre problème.


Beaucoup de gens manquent le point ici. Ce qu'il essaie de faire (après avoir corrigé la faute de frappe où l'attribut href est manquant) fonctionne dans n'importe quel autre navigateur.

IE 8 et ci-dessous ont un bug où si le premier élément du texte lors de la définition de innerHTML est un tag (peut-être d'autres), il est ignoré. Si vous venez de mettre un espace ou une nouvelle ligne ou une autre balise en premier, cela fonctionne.

Il a même découvert cela quand il a dit que mettre le <div> premier le corrige.

Ce n'est pas valide, mais c'est comme ça que vous le réparez.

Edit: en d'autres termes: foo.innerHTML = "\n" + yourHtmlWithLinkInIt ;



La chose est que cela fonctionne dans FireFox et Google Chrome, mais pas dans IE.

C'est parce que vous ne pouvez pas définir la balise innerHTML d'InternetExplorer avec une chaîne, si la chaîne est plus que du texte, c'est-à-dire un élément HTML.

J'ai expérimenté ceci en essayant de remplir dynamiquement un ComboBox dans une cellule de table avec AJAX ...

La solution consiste à utiliser JQuery.
Alors vous pouvez faire:
$("#YourElementID").html('<link \"http://test.com/css/template.css\" rel=\"stylesheet\" /> <div>abc</div>');
et JQuery fera les trucs DOM, que Selbie et KooiInc décrivent, pour vous.





innerhtml