0

以下は私のユーザースクリプトです。HTMLを置き換えると、何らかの形でそれを壊しているため、アラートは表示されません。

文字通り domain[dot]com である div または span の通常のテキストを置き換えて、domain.com として表示するにはどうすればよいですか? 以下は機能しますが、後で実行されるコードや他のユーザースクリプトが壊れます。

$(function() {
    var html = $('body').html();
    var res=html.replace(/\[dot\]/g, ".");
    $('body').html(res);
    //doesnt call, however html is replaced
    alert('a'); 
});
4

2 に答える 2

2

HTML 全体を置き換えるのではなく、ページ内のテキストを置き換えます。HTML 全体を取得して元に戻すと、すべてのコードが再解析され、最初に読み込まれたときの状態に戻されます。これは、要素にバインドされたイベントがなくなったことを意味します。

再帰関数を使用してドキュメント内のテキスト ノードを見つけ、各ノードのテキストを置換します。

function replaceText(node, replacer) {
  var n = node.childNodes;
  for (var i = 0; i < n.length; i++) {
    if (n[i].nodeType == 3) {
      n[i].nodeValue = replacer(n[i].nodeValue);
    } else {
      replaceText(n[i], replacer);
    }
  }
}

$(function(){

  replaceText(document.body, function(s){
    return s.replace(/\[dot\]/g, '.');
  });

});

デモ: http://jsfiddle.net/Guffa/ex83P/

ご覧のとおり、関数には jQuery はありません。jQuery は要素のみを処理するため、テキスト ノードを処理するメソッドはありません。

于 2012-10-07T11:59:18.517 に答える
0

これは特定のページのセットに対するものですか、それとも遭遇するすべてのページでこれを行う予定ですか? 特定の場合は、セレクターを大幅に絞り込んでみてください。この方法では、ページ上のすべての span/div を処理しようとはしません (明らかに遅いです)。Firebug がお手伝いできるはずです。

于 2012-10-07T12:44:46.153 に答える