如何从JavaScript中获取元标记的信息?
我需要的信息是在一个元标记。 当property =“video”时,如何访问meta标签的“内容”数据?
HTML:
<meta property="video" content="http://video.com/video33353.mp4" />
你可以使用这个:
function getVideoContent() { var metas = document.getElementsByTagName('meta'); for (var i=0; i<metas.length; i++) { if (metas[i].getAttribute("property") == "video") { return metas[i].getAttribute("content"); } } return ""; }
其他答案应该可以做到这一点,但这个更简单,不需要jQuery:
document.head.querySelector("[property=video]").content;
很多很难阅读的答案在这里。 一个class轮在这里
document.querySelector("meta[property='og:image']").getAttribute("content");
function getMetaContentByName(name,content){ var content = (content==null)?'content':content; return document.querySelector("meta[name='"+name+"']").getAttribute(content); }
用这种方式:
getMetaContentByName("video");
本页面上的示例:
getMetaContentByName("twitter:domain");
$("meta[property='video']").attr('content');
有一个更简单的方法:
document.getElementsByName('name of metatag')[0].getAttribute('content')
在JQuery中,你可以通过以下方式实现这一点:
$("meta[property='video']");
在JavaScript中,你可以通过以下方式来实现
document.getElementsByTagName('meta').item(property='video');
function getDescription() { var info = document.getElementsByTagName('meta'); return [].filter.call(info, function (val) { if(val.name === 'description') return val; })[0].content; }
更新版本:
function getDesc() { var desc = document.head.querySelector('meta[name=description]'); return desc ? desc.content : undefined; }
这段代码适用于我
<meta name="text" property="text" content="This is text" /> <meta name="video" property="text" content="http://video.com/video33353.mp4" />
JS
var x = document.getElementsByTagName("META"); var txt = ""; var i; for (i = 0; i < x.length; i++) { if (x[i].name=="video") { alert(x[i].content); } }
示例小提琴: http : //jsfiddle.net/muthupandiant/ogfLwdwt/
这是一个函数,它将返回任何元标记的内容,并记忆结果,避免不必要的DOM查询。
var getMetaContent = (function(){ var metas = {}; var metaGetter = function(metaName){ var theMetaContent, wasDOMQueried = true;; if (metas[metaName]) { theMetaContent = metas[metaName]; wasDOMQueried = false; } else { Array.prototype.forEach.call(document.getElementsByTagName("meta"), function(el) { if (el.name === metaName) theMetaContent = el.content; metas[metaName] = theMetaContent; }); } console.log("Q:wasDOMQueried? A:" + wasDOMQueried); return theMetaContent; } return metaGetter; })(); getMetaContent("description"); /* getMetaContent console.logs the content of the description metatag. If invoked a second time it confirms that the DOM was only queried once */
这里是一个扩展版本,也查询开放graphics标签 ,并使用数组#一些 :
var getMetaContent = (function(){ var metas = {}; var metaGetter = function(metaName){ wasDOMQueried = true; if (metas[metaName]) { wasDOMQueried = false; } else { Array.prototype.some.call(document.getElementsByTagName("meta"), function(el) { if(el.name === metaName){ metas[metaName] = el.content; return true; } if(el.getAttribute("property") === metaName){ metas[metaName] = el.content; return true; } else{ metas[metaName] = "meta tag not found"; } }); } console.info("Q:wasDOMQueried? A:" + wasDOMQueried); console.info(metas); return metas[metaName]; } return metaGetter; })(); getMetaContent("video"); // "http://video.com/video33353.mp4"
我个人更喜欢把它们放在一个对象哈希中,然后我可以在任何地方访问它们。 这可以很容易地设置为一个注射variables,然后一切都可以拥有它,它只抓住一次。
通过包装function,这也可以作为一个class轮完成。
var meta = (function () { var m = document.querySelectorAll("meta"), r = {}; for (var i = 0; i < m.length; i += 1) { r[m[i].getAttribute("name")] = m[i].getAttribute("content") } return r; })();