2010-05-14 11 views
12

Eventuali duplicati:
Is it possible to use javascript to change the meta-tags of the page?Hai problemi utilizzando jQuery per impostare meta tag valori

Sto cercando di impostare meta tag che utilizzano jQuery (si prega di non rispondere che questo doesn' Ho senso dai motori di ricerca blah-blah-blah ... Sto caricando invocando funzioni Javascript di terze parti che esaminano questi valori, come Tweetmeme e Facebook).

Se uso:

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

funziona per impostare il valore di un meta tag esistente, ma non crea un meta tag, se un tale di nome non esiste.

Se si dispone di una visione o esperienza con questo, si prega di rispondere ...

+0

Quale codice jQuery stai usando per creare il tag? – Luke

risposta

12

Si può fare questo, non il più pulito, ma quello che si sta cercando di fare è piuttosto strano, quindi non c'è un ottimo modo per gestire iT:

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

l'espressione condizionale in là controlli .length, che è 0 o false se non trovato, se è questo il caso creiamo l'elemento e aggiungerlo alla testa, se è stato aggiunto o originariamente trovato, mt è impostato su <meta> con questo nome ora e puoi impostare l'attrib ute.

+0

Grazie per il codice Nick. Quello che sto facendo può sembrare strano, ma è un'app al 100% lato client e, così come l'utente fa le cose, il valore dei tag Meta deve cambiare per riflettere lo stato attuale. – Zhami

+0

ciao, non dovrebbe essere: mt.attr ('some-name', 'some value'); –

+1

@Andresch - No, stiamo impostando l'attributo 'content =" some value "' del tag '', è un attributo specifico di quell'elemento ... puoi leggere ulteriori informazioni qui: http: // www .w3.org/TR/html4/struct/global.html # h-7.4.4.2 –

6

Sfruttando il codice di Nick, ho creato una funzione per eseguire l'impostazione del metatag, creando se necessario. Se ciò dovesse essere utile a nessuno ...

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); 
    } 

Il metaName più spesso potrebbe essere assunto come "nome" Ma sono anche dover impostare "proprietà" e, in modo ha fatto la funzione di gestire una meta meta -nome.

+0

posso suggerire di cambiare la funzione per restituire 'mt'? Potresti voler eseguire anche altre azioni su di esso. – nickf

+0

Ah, concatenamento, ovviamente. Grazie per avermi ricordato lo schema! – Zhami

6

Stavo solo sperimentando un po 'su iOS. Si è scoperto che era possibile impostare dinamicamente un meta tag per impedire lo zoom su iOS in questo modo:

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

La rimozione tuttavia, non riattivare lo zoom:

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

Ma sovrascrivendo il meta tag:

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

con i suoi valori di default ha fatto.

+0

Credo che la prima riga dell'ultimo blocco di codice dovrebbe essere: /* $ ('meta [nome = vista]'). Attr (*/ Ho aggiunto un '. – KatieK

+0

@KatieK Risolto, grazie! – Matijs