2010-05-14 28 views
12

Mögliche doppelte Werte Meta-Tag zu setzen:
Is it possible to use javascript to change the meta-tags of the page?Probleme mit jQuery Mit

ich Meta-Tags mit jQuery zu setzen bin versucht (bitte antworten Sie nicht, dass diese doesn‘ t Sinn machen, da Suchmaschinen blah-blah-blah ... Ich lade Aufruf von 3rd-Party-Javascript-Funktionen, die diese vales, wie Tweetmeme und Facebook untersuchen).

Wenn ich benutze:

$('meta[name=some-name]').attr('content', 'some value'); 

es funktioniert, den Wert eines vorhandenen Meta-Tag zu setzen, wird aber nicht ein Meta-Tag erstellen, wenn eine solche Namen nicht existiert.

Wenn Sie Einsicht oder Erfahrung mit diesem haben, antworten Sie bitte ...

+0

Welchen jQuery-Code verwenden Sie zum Erstellen des Tags? – Luke

Antwort

12

Sie können dies tun, nicht das sauberste, aber was Sie versuchen, ist ziemlich seltsam zu tun, so dass es nicht eine gute Möglichkeit, zu handhaben es:

var mt = $('meta[name=some-name]'); 
mt = mt.length ? mt : $('<meta name="some-name" />').appendTo('head'); 
mt.attr('content', 'some value'); 

der bedingte Ausdruck dort Kontrollen .length, die 0 oder false ist, wenn nicht gefunden, wenn das der Fall ist wir das Element erstellen und hängen sie ihn an den Kopf, ob es wurde hinzugefügt oder ursprünglich gefunden, mt ist jetzt auf den <meta> mit diesem Namen eingestellt, und Sie können das Attribut festlegen ute.

+0

Danke für den Code Nick. Was ich mache, mag merkwürdig erscheinen, aber es ist eine 100% clientseitige App, und so wie der Benutzer Dinge tut, muss sich der Wert der Meta-Tags ändern, um den aktuellen Zustand widerzuspiegeln. – Zhami

+0

hi, sollte es nicht sein: mt.attr ('irgendein name', 'irgendein wert'); –

+1

@Andresch - nein, wir setzen das 'content =" irgendein Wert "Attribut des' 'Tags, es ist ein spezifisches Attribut dieses Elements ... Sie können mehr darüber hier lesen: http: // www .w3.org/TR/html4/struct/global.html # h-7.4.4.2 –

6

Mithilfe von Nicks Code habe ich eine Funktion zur Einstellung des Meta-Tags erstellt, die bei Bedarf erstellt wurde. Sollte dies von niemandem nützen ...

function setOrCreateMetaTag(metaName, name, value) { 
     var t = 'meta['+metaName+'='+name+']'; 
     var mt = $(t); 
     if (mt.length === 0) { 
      t = '<meta '+metaName+'="'+name+'" />'; 
      mt = $(t).appendTo('head'); 
     } 
     mt.attr('content', value); 
    } 

Die metaName am häufigsten könnte angenommen werden, „name“ zu sein, aber ich bin auch so gut, um „Eigentum“ hat, hergestellt, so dass die Funktion eine Meta Meta-Griff -Name.

+0

kann ich vorschlagen, die Funktion zu ändern, um 'mt' zurückzugeben? Vielleicht möchten Sie auch andere Aktionen ausführen. – nickf

+0

Ah, Verkettung natürlich. Danke für die Erinnerung an das Muster! – Zhami

6

Ich experimentierte gerade ein wenig mit iOS. Es stellte sich heraus, dass es möglich war, dynamisch ein Meta-Tag zu setzen, wie so Zoomen auf iOS zu verhindern:

$('<meta>', { 
name: 'viewport', 
content: 'width=device-width, minimum-scale=1, maximum-scale=1' 
}).appendTo('head'); 

es jedoch Entfernen, nicht wieder aktivieren Zoomen:

$('meta[name=viewport]').remove(); 

Aber das Überschreiben des Metatag:

$('meta[name=viewport]').attr(
'content', 
'width=980, minimum-scale=0.25, maximum-scale=1.6' 
); 

mit seinen Standardwerten tat.

+0

Ich glaube, dass die erste Zeile des letzten Codeblocks sein sollte: /* $ ('meta [name = Ansichtsfenster]'). Attr (*/ Ich fügte ein '. – KatieK

+0

@KatieK Fixed, thanks! – Matijs