JavaScript - 提取文档元字段的最快方法

时间:2009-08-12 19:20:43

标签: javascript xpath document meta-tags

我需要提取文档的“description”元标记。

默认方式是使用document.getElementsByTagName('META')然后遍历数组 - 如下所示:http://www.rgagnon.com/jsdetails/js-0070.html

但我想知道是否没有其他更快,“一行代码”方法。我不熟悉xPath - 但也许这可行吗?有什么想法吗?

4 个答案:

答案 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(',');
}