如何在不使用 jquery append 的情况下插入元标记?

Posted

技术标签:

【中文标题】如何在不使用 jquery append 的情况下插入元标记?【英文标题】:How to insert metatag without using jquery append? 【发布时间】:2011-12-04 09:56:44 【问题描述】:

我使用以下 jquery 将元标记插入到 html 文档中。

<script type="text/javascript">
if(screen.width>=320 && screen.width<=767)
$('head').append('<meta id="viewport" name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">');    
</script>

如果可能,我想在不使用 jquery 的情况下插入元标记。有人知道我该怎么做吗?

我相信我可能需要使用 document.getElementByTagName 但我不确定如何使用。

以防万一您想知道,我将元标记插入到我的 html 中,以优化网站以使用 iphone 进行查看。 不幸的是,width=device-width 不是一个选项,因为它与我的 ipad 版本不兼容。

【问题讨论】:

出于好奇,您确定移动设备会在检查元标记之前运行您的 Javascript 吗? 我已经在 ipad 和 iphone 上测试过它,它可以工作。不过是个好问题。我不确定其他任何设备。以后我会试试安卓的。 实际上,我收回了这一点。我发现 iphone 并没有始终如一地检测到元标记(至少我认为这是问题所在)。有时它起作用,有时它不起作用。我想我会改用 php 并重定向到特定的移动页面。 我注意到“content”属性中的分号是错误的,应该是逗号:“width=320, initial-scale=1, ...” 【参考方案1】:
var viewPortTag=document.createElement('meta');
viewPortTag.id="viewport";
viewPortTag.name = "viewport";
viewPortTag.content = "width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=0";
document.getElementsByTagName('head')[0].appendChild(viewPortTag);

【讨论】:

【参考方案2】:

您还可以使用“setAttribute”(而不是“点”表示法)来表示怪异的属性名称(包含非字母数字字符)。

例子:

var iefix=document.createElement('meta');
iefix.setAttribute("http-equiv", "X-UA-Compatible");
iefix.setAttribute("content", "IE=Edge");
document.getElementsByTagName('head')[0].appendChild(iefix);

以上示例导致 IE (

【讨论】:

【参考方案3】:

Javascript 解决方案:

document.getElementsByTagName('head')[0].innerHTML += '<meta id="viewport" name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">';

【讨论】:

【参考方案4】:

这是一个创建元标记的解决方案,如果它尚不存在:

var viewport = document.querySelector('meta[name=viewport]');
var viewportContent = 'width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0';

if (viewport === null) 
  var head = document.getElementsByTagName('head')[0];
  viewport = document.createElement('meta');
  viewport.setAttribute('name', 'viewport');
  head.appendChild(viewport);


viewport.setAttribute('content', viewportContent);

【讨论】:

以上是关于如何在不使用 jquery append 的情况下插入元标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django、Ajax、jQuery 在不刷新页面的情况下提交表单?

如何使用 jQuery 在不刷新页面的情况下更新 cookie 值?

如何在不使用 jQuery(替代方式)的情况下知道页面何时准备就绪? [复制]

如何在不使用 jquery 插件的情况下快速跳转到下一部分?

如何在不使用插件的情况下将 jQuery 1.5.1 升级到 3.0

如何在不使用jQuery的情况下获取元素的offset()。top值?