我需要提取文档的“description”元标记。
默认方式是使用document.getElementsByTagName('META')然后遍历数组 - 如下所示:http://www.rgagnon.com/jsdetails/js-0070.html
但我想知道是否没有其他更快,“一行代码”方法。我不熟悉xPath - 但也许这可行吗?有什么想法吗?
答案 0 :(得分:6)
确定...
var desc = document.getElementsByName('description')[0].getAttribute('content');
这假设当然有一个名为描述的元标记。
为了更完整,无论如何都会捕捉描述。
function getDesc(){
var metas = document.getElementsByTagName('meta');
for(var i=0;mLen=metas.length;i<mLen;i++){
if(metas[i].getAttribute('name').toLowerCase() == 'description'){
return metas[i].getAttribute('content');
}
}
return null;//or empty string if you prefer
}
var desc = getDesc();
答案 1 :(得分:1)
你可以使用XPath(在支持document.evaluate
的客户端中)这样做,但这可能是一种过度杀伤力:
document.evaluate('//*[@name="description"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
答案 2 :(得分:0)
Scunliffe,我认为你的建议肯定会有所帮助,至少是多线功能。
我想出了一个不能在Webkit(Chrome + Safari)上运行但是非常紧凑的解决方案:
var metas = document.getElementsByTagName('META');
var value = (metas.namedItem ("description") || metas.namedItem ("Description") || metas.namedItem ("DESCRIPTION") || {}).content;
这将在NodeList对象上使用namedItem()函数,寻找其他程序员可能编写“描述”的最可能方式。请注意,这将检索标记属性的值,而忽略属性名称的大小写:
<meta name="description" content="my description" />
<meta NAME="Description" CoNtEnT="my description" />
但是唉(Oy Vey)nameItem()在Safari&amp; Chrome :-(也许这些浏览器还有另一种方法......
答案 3 :(得分:0)
这也取决于“最快”的含义 - 您的意思是您可以编写的最短代码,还是浏览器的最快响应?
对于最快的响应,只需查看head元素中的元元素,然后选择名称为'description'的元素。
{
var s=[], metas=document.getElementsByTagName('head')[0].getElementsByTagName('meta');
for(var i=0,L=metas.length;i<L;i++){
if(metas[i].name=='description')s[s.length]=metas[i].content;
}
s= s.join(',');
}