无法使用jQuery设置元标记值

Zha*_*ami 12 jquery meta-tags

可能重复:
是否可以使用javascript更改页面的元标记?

我正在尝试使用jQuery设置元标记(请不要回答这是没有意义的,因为搜索引擎等等等等......我正在加载调用第三方Javascript函数来检查这些值,例如Tweetmeme和Facebook).

如果我使用:

 $('meta[name=some-name]').attr('content', 'some value');
Run Code Online (Sandbox Code Playgroud)

它确实可以设置现有元标记的值,但如果这样的命名元标记不存在,则不会创建元标记.

如果您有这方面的见解或经验,请回复...

Nic*_*ver 12

你可以做到这一点,而不是最干净的,但你想要做的事情很奇怪,所以没有一个很好的方法来处理它:

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

那里的条件表达式.length是0,false如果没有找到,如果是这样我们创建元素并将其附加到头部,无论是添加还是最初找到,mt现在都设置为<meta>带有该名称,你可以设置属性.


Zha*_*ami 6

利用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);
    }
Run Code Online (Sandbox Code Playgroud)

metaName最常被假定为"name",但我也必须设置"property",因此使函数处理元元名.


Mat*_*ijs 6

我只是在iOS上尝试了一下这个.事实证明,可以动态设置元标记以防止在iOS上进行缩放,如下所示:

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

但是,删除它并没有重新启用缩放:

$('meta[name=viewport]').remove();
Run Code Online (Sandbox Code Playgroud)

但是要覆盖元标记:

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

用它的默认值做了.