2010-05-14 14 views
12

Duplicar posible:
Is it possible to use javascript to change the meta-tags of the page?Tiene problemas usando jQuery para establecer valores de etiqueta meta

Estoy tratando de establecer etiquetas meta utilizando jQuery (No responda que este doesn' Tiene sentido desde los motores de búsqueda bla-bla-bla ... Estoy cargando invocando funciones de terceros de Javascript que examinan estos valles, como Tweetmeme y Facebook.

Si utilizo:

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

que hace el trabajo para establecer el valor de una etiqueta meta existente, pero no crea una etiqueta meta si el tal llamado no existe.

Si usted tiene una visión o experiencia con esto, por favor, responda ...

+0

¿Qué código jQuery estás usando para crear la etiqueta? – Luke

Respuesta

12

usted puede hacer esto, no la más limpia, pero lo que estamos tratando de hacer es bastante extraño, así que no hay una gran manera de manejar que:

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

la expresión condicional en allí cheques .length, que es 0 o false si no se encuentra, si ese es el caso creamos el elemento y añadirlo a la cabeza, si se añadió o originalmente encontrado, mt está configurado en <meta> con ese nombre ahora, y puede configurar attrib ute.

+0

Gracias por el código Nick. Lo que estoy haciendo puede parecer extraño, pero es una aplicación 100% del lado del cliente y, a medida que el usuario hace las cosas, el valor de las etiquetas Meta debe cambiar para reflejar el estado actual. – Zhami

+0

hola, no debería ser: mt.attr ('algún-nombre', 'algún valor'); –

+1

@Andresch - no, estamos estableciendo el atributo 'content =" value "' de la etiqueta '', es un atributo específico de ese elemento ... puede leer más al respecto aquí: http: // www .w3.org/TR/html4/struct/global.html # h-7.4.4.2 –

6

Aprovechando el código de Nick, hice una función para hacer la configuración de la metaetiqueta, creando si es necesario. En caso de que esto sea de utilidad para cualquiera ...

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

El metaName más a menudo podría ser asumido como "nombre" pero también me veo obligado a establecer "propiedad", así que hizo la función de manejar un meta meta -nombre.

+0

¿Puedo sugerir cambiar la función para devolver 'mt'? Es posible que desee realizar otras acciones en él también. – nickf

+0

Ah, encadenando, por supuesto. ¡Gracias por recordarme el patrón! – Zhami

6

Estaba experimentando con esto un poco en iOS. Resultó que era posible establecer dinámicamente una etiqueta meta para evitar el zoom en IOS, así:

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

Si lo quita, sin embargo, no volver a activar el zoom:

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

Pero el sobreescribiendo etiqueta de meta:

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

con sus valores predeterminados.

+0

Creo que la primera línea del último bloque de código debería ser: /* $ ('meta [name = viewport]'). Attr (*/ Agregué un '. – KatieK

+0

@KatieK ¡Reparado, gracias! – Matijs

Cuestiones relacionadas