3

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

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

但我想知道是否没有其他更快的“一行代码”方法。我不熟悉 xPath - 但也许这可以工作?有任何想法吗?

4

4 回答 4

6

当然...

var desc = document.getElementsByName('description')[0].getAttribute('content');

这假定当然有一个名为 description 的 Meta Tag。

为了更完整,无论大小写如何,这都会捕获描述。

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();
于 2009-08-12T19:25:04.223 回答
1

您可以使用 XPath(在支持的客户端中document.evaluate)执行此操作,但这可能有点矫枉过正:

document.evaluate('//*[@name="description"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
于 2009-08-12T19:41:11.820 回答
0

斯昆利夫,我认为你的建议肯定会奏效,至少多线功能会。

我想出了一个不能在 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和Chrome上不起作用:-(也许这些浏览器有另一种方法......

于 2009-08-12T23:47:59.280 回答
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(',');
}
于 2009-08-13T02:39:13.317 回答