Не удалось использовать jQuery для установки значений метатега
Возможный дубликат:
Можно ли использовать javascript для изменения метатегов на странице?
Я пытаюсь установить метатеги с помощью jQuery (пожалуйста, не отвечайте, что это не имеет смысла, поскольку поисковые системы blah-blah-blah... Я загружаю вызов сторонних функций Javascript, которые исследуют эти значения, таких как Tweetmeme и Facebook).
Если я использую:
$('meta[name=some-name]').attr('content', 'some value');
он работает, чтобы установить значение существующего метатега, но не создает метатег, если такого имени не существует.
Если у вас есть понимание или опыт с этим, ответьте...
Ответы
Ответ 1
Вы можете сделать это, а не самый чистый, но то, что вы пытаетесь сделать, довольно странно, поэтому нет отличного способа справиться с этим:
var mt = $('meta[name=some-name]');
mt = mt.length ? mt : $('<meta name="some-name" />').appendTo('head');
mt.attr('content', 'some value');
Условное выражение там проверяет .length
, которое равно 0 или false
, если не найдено, если в этом случае мы создаем элемент и добавляем его в голову, независимо от того, было ли оно добавлено или изначально найдено, mt
теперь устанавливается <meta>
с этим именем, и вы можете установить атрибут.
Ответ 2
Используя код Nick, я сделал функцию для установки метатега, создав при необходимости. Если это будет полезно для всех...
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);
}
MetaName чаще всего может считаться "именем", но мне также нужно установить "свойство", поэтому функция обработала мета-имя мета.
Ответ 3
Я просто экспериментировал с этим немного в iOS. Оказалось, что можно было динамически установить метатег, чтобы предотвратить масштабирование на iOS так:
$('<meta>', {
name: 'viewport',
content: 'width=device-width, minimum-scale=1, maximum-scale=1'
}).appendTo('head');
Удаление этого, однако, не активировало масштабирование:
$('meta[name=viewport]').remove();
Но перезапись метатега:
$('meta[name=viewport]').attr(
'content',
'width=980, minimum-scale=0.25, maximum-scale=1.6'
);
со значениями по умолчанию.