4

target="_blank"正規表現を 1 つだけ使用して、すべての<a>タグにa を追加することはできますか? 私は否定的および肯定的な先読み/後読みを試してきましたが、役に立ちませんでした。これは次のことを行う必要があります。

  • hrefで始まるアンカータグに一致http://
  • アンカー タグにタグがない場合は、タグtargetを追加しますtarget="_blank"
  • タグがある場合は、タグがまだ に設定されていないtargetかどうかを確認し、設定されていない場合は に置き換えられます。target"_blank"target="_blank"

これは可能ですか?そうでない場合、これを行うための計算負荷が最も少ない方法は何でしょうか?

4

3 に答える 3

3

これがDOMからのhtmlであるかどうかを実際に指定していませんでした(とりわけ)。DOM を変更したいと仮定すると... jQuery を使用すると、次のようなことができます。

$(document).ready( function() {
    $('a').filter( function() {
        return $(this).attr('href').substr(0, 7) == "http://";
    }).attr('target', '_blank');
});

ここにそれが機能することを示すjsfiddleがあります(要素を調べて、 with が have で始まっていることを確認aできますhref):http://jsfiddle.net/amRrj/http://target="_blank"

于 2013-04-30T13:12:47.053 に答える
1

HTML も整形式の XML である場合は、xpath と xslt をサポートする XML ツールを使用することをお勧めします。XMLを操作するためのgrep、sedなどに似たツールを提供するXMLStarletを見てください。私はこれがあなたが望むことをすると思いますが、私はそれを試していません:

xml ed -P -S -i //a -t attr -n target -v _blank somefile.html >somefile_2.html

xml edXMLStarlet 編集コマンドを呼び出します

-Pフォーマットを保持

-S空白を保持する

-i //aすべてのタグに挿入

-t attr挿入タイプは属性です

-n target挿入する属性の名前

-v _blank挿入する属性の値

より複雑な編集には、XMLStarlet を xslt 変換とともに使用できます。

于 2013-04-30T13:43:07.020 に答える
0

別のオプションは、に追加target="_blank"すること<base href…&gt;です。<a>これにより、個別に追加する必要がなく、ページのタグ ターゲットにグローバルに影響します。タグのターゲット宣言は<a>これをオーバーライドします。

    var target = '_self';

    if(external){
        target = '_blank';
    }

    $('#base_tag').attr('target', target);

フィドル

<base> ドキュメンテーション

于 2016-09-01T08:44:47.123 に答える