3

ドキュメントの「説明」メタ タグを抽出する必要があります。

デフォルトの方法は、 document.getElementsByTagName('META') を使用してから、配列を反復処理することです - http://www.rgagnon.com/jsdetails/js-0070.htmlにあるように

しかし、「1行のコード」というより迅速なアプローチが他にないのではないかと思っています。私は xPath に詳しくありませんが、うまくいくでしょうか? 何か案は?

4

4 に答える 4

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();
于 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

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 と Chrome では機能しません :-( これらのブラウザには別の方法があるかもしれません...

于 2009-08-12T23:47:59.280 に答える
0

また、「最速」とは何を意味するかにもよります。つまり、記述できるコードが最短か、それともブラウザーからの応答が最速かということですか?

最も迅速な応答を得るには、head 要素の meta 要素を見て、「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 に答える