127 votes

Comment ajouter quelque chose dans <head> à l'aide de jquery/javascript ?

Je travaille avec un CMS, qui empêche l'édition de la source HTML pour les <head> élément.

Par exemple, je souhaite ajouter ce qui suit au-dessus de la rubrique <title> étiquette :

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

8 votes

Cela n'a pas de sens... L'en-tête est analysé avant l'exécution du javascript. L'ajout de meta stuf à l'en-tête via javascript n'aurait pas l'effet désiré.

1 votes

@Mickel - Oui. Les réponses à toutes les questions m'aident.

2 votes

Bien que cela ne soit pas lié à la question du CMS, il peut être judicieux d'ajouter des balises méta dans certaines circonstances. Il existe divers modules complémentaires de navigateur et injections javascript qui utilisent les données contenues dans les balises méta pour collecter des informations. OpenGraph de Facebook en est un exemple. L'injection de métabalises dans l'en-tête est nécessaire lorsque vous n'avez pas d'accès direct au code HTML d'origine, que ce soit par la faute d'un CMS ou parce que vous écrivez vous-même un addon/injection javascript.

172voto

nickf Points 185423

Vous pouvez le sélectionner et l'enrichir comme d'habitude :

$('head').append('<link />');

2 votes

Comment puis-je contrôler l'ordre dans lequel ce lien sera placé ?

8 votes

Lire la documentation : docs.jquery.com/Manipulation insertBefore , insertAfter est ce que vous voulez.

3 votes

J'ai placé ceci dans document.ready, mais cela ne s'ajoute pas au contenu de mon en-tête

157voto

Joshua Woodward Points 449

JavaScript :

document.getElementsByTagName('head')[0].appendChild( ... );

Créez l'élément DOM comme suit :

const link = document.createElement('link');
link.href = 'href';
link.rel = 'rel';

document.getElementsByTagName('head')[0].appendChild(link);

1 votes

Fonctionne avec les éléments script !

33voto

David Hedlund Points 66192

JQuery

$('head').append( ... );

JavaScript :

document.getElementsByTagName('head')[0].appendChild( ... );

5 votes

AppendChild ne nécessite-t-il pas un élément DOM ? var elem = document.createElement() document.getElementsByTagName('head')[0].appendChild( elem ) ;

2 votes

Oui, j'ai juste laissé cette partie comme ... parce que je n'avais pas l'impression que c'était un élément central de la question, et aussi, au moment de la rédaction, il n'y avait pas d'exemple pratique de ce qu'il voulait mettre dans la tête. mais oui, il faut que ce soit un élément DOM.

11voto

Benny Neugebauer Points 5393

Dans les navigateurs les plus récents (IE9+), vous pouvez également utiliser document.head :

Ejemplo:

var favicon = document.createElement('link');
favicon.id = 'myFavicon';
favicon.rel = 'shortcut icon';
favicon.href = 'http://www.test.com/my-favicon.ico';

document.head.appendChild(favicon);

-6voto

Dave Points 34

Avec jquery, vous avez d'autres possibilités :

$('head').html($('head').html() + '...');

Quoi qu'il en soit, cela fonctionne. L'option JavaScript, comme d'autres l'ont dit, est également correcte.

2 votes

Cela supprimera le contenu existant et générera de nouveaux éléments. Cela peut avoir des effets secondaires indésirables tels que la perte de propriétés DOM définies dynamiquement et la ré-exécution de scripts.

0 votes

C'est pourquoi vous devez utiliser avant $('head').html() pour récupérer toutes les propriétés du DOM.

1 votes

Utilisation .html() ne se rétablira pas tous les propriétés du DOM. (L'exemple le plus courant de ce problème, et le plus visible, est l'utilisation d'un code similaire pour ajouter de nouveaux champs à un formulaire. L'attribut value représente la valeur par défaut d'un champ. html() et le rétablir ensuite réinitialisera tous les champs existants à leurs valeurs par défaut).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X