Je travaille avec un CMS, qui empêche de modifier la source HTML de l' <head>
élément.
Par exemple, je souhaite ajouter ce qui suit au-dessus de la <title>
balise:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
javascript
jquery
css
xhtml
Jitendra Vyas
la source
la source
<meta>
dynamique de balises n'ait aucun effet, selon ce qu'elles sont et le navigateur impliqué.Réponses:
Vous pouvez le sélectionner et y ajouter comme d'habitude:
la source
insertBefore
,insertAfter
c'est ce que vous voulez.JavaScript:
Créez un élément DOM comme ceci:
la source
jQuery
JavaScript:
la source
...
parce que je ne pensais pas que c'était une partie centrale de la question, et aussi, au moment de la rédaction de cet article, il n'y avait pas d'exemple pratique de ce qu'il voulait mettre en tête. mais oui, il doit s'agir d'un élément DOM.Vous pouvez utiliser
innerHTML
pour concaténer simplement la chaîne de champ supplémentaire;Cependant, vous ne pouvez pas garantir que les éléments supplémentaires que vous ajoutez à la tête seront reconnus par le navigateur après le premier chargement, et il est possible que vous obteniez un FOUC (flash de contenu non stylisé) lorsque les feuilles de style supplémentaires sont chargées.
Je n'ai pas regardé l'API depuis des années, mais vous pouvez également l'utiliser
document.write
, ce qui a été conçu pour ce type d'action. Cependant, cela vous obligerait à bloquer le rendu de la page jusqu'à ce que votre requête AJAX initiale soit terminée.la source
Dans les derniers navigateurs (IE9 +), vous pouvez également utiliser document.head :
Exemple:
la source
Créez un élément temporaire (par exemple
DIV
), affectez votre code HTML à sainnerHTML
propriété, puis ajoutez ses nœuds enfants à l'HEAD
élément un par un. Par exemple, comme ceci:Comparé à la réécriture du
HEAD
contenu entier via soninnerHTML
, cela n'affecterait en rien les éléments enfants existants de l'HEAD
élément.Notez que les scripts insérés de cette manière ne sont apparemment pas exécutés automatiquement, tandis que les styles sont appliqués avec succès. Donc, si vous avez besoin d'exécuter des scripts, vous devez charger les fichiers JS en utilisant Ajax , puis exécuter leur contenu en utilisant
eval()
.la source
body
, mais cela peut-il vraiment être fait à l'intérieur duhead
-tag? J'avais l'impression que les balises admis que sibase
,link
,meta
,title
,style
etscript
?DIV
élément est juste un conteneur temporaire dans le but d' analyser le code HTML . Vous ne devez pas insérer leDIV
lui - même dans le fichierHEAD
. Vous devez insérer ses nœuds enfants . Veuillez consulter l'exemple que j'ai ajouté à la réponse.temp
élément." Voir la documentation sur Node.firstChild () .Essayez un javascript pur:
Bibliothèque JS:
Type:
appendHtml(document.head, '<link rel="stylesheet" type="text/css" href="http://example.com/example.css"/>');
ou jQuery:
la source
Avec jquery, vous avez une autre option:
de toute façon ça marche. Option JavaScript d'autres ont dit, c'est correct aussi.
la source
.html()
ne récupérera pas toutes les propriétés DOM. (L'instance la plus courante de ce problème, et la plus visible, est lorsque vous utilisez un code similaire pour ajouter de nouveaux champs à un formulaire. L'attribut value représente la valeur par défaut d'un champ, donc l'obtenirhtml()
puis le redéfinir réinitialisera tous les champs existants. champs à leurs valeurs par défaut).