web-dev-qa-db-ja.com

jQuery-本文が読み込まれた後、テキストを検索して置換します

テキストを見つけてjqueryに置き換えることに関して、他の人から驚くべき助けを受けました。

以下のコードは、単語「Subject:」を検索し、「Name:」に置き換えます。

$("*").each(function () { 
   if ($(this).children().length == 0) { 
      $(this).text($(this).text().replace('Subject:','Name:')); 
   } 
});

そして、これは素晴らしく機能します。

私が問題に直面しているのは、ページの読み込み後に読み込まれるテキストを置き換えることだけです。

サーバーからのデータを表示するjavascript関数がいくつかありますが、ページがすべての要素をロードした後でのみです。たとえば、ユーザーは、データベースから製品のリストをロードするイベントを開始するドロップダウンから値を選択します。

私はこれらの製品のいくつかを次のようにフォーマットします:

グラニースミスりんご価格:1ポンドあたりx.xx栄養成分...

「Price:」という単語を置き換えて、場合によっては「Cost:」に置き換えたいだけです。

しかし、私が述べたように、そのデータはまだロードされていません。また、ユーザーがドロップダウンメニューから「GrannySmithApples」を選択した後にのみ表示されます。

これは私が一緒に暮らさなければならない限界ですか?

15
coffeemonitor

ajaxStop event にイベントをアタッチして、ロード時に試してみることができます。

function replaceText() {
    var jthis = $(this);
    $("*").each(function() { 
        if(jthis.children().length==0) { 
            jthis.text(jthis.text().replace('Subject:', 'Name:')); 
        } 
    });
}
$(document).ready(replaceText);
$("html").ajaxStop(replaceText);
13
icktoofay

このように$(document).ready()コールバックから関数を呼び出します

$(document).ready(function() { replace_stuff(); } );
1

以下の関数は私にとって完璧に機能します:

function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  $(selector).each(function () {
    var $this = $(this);
    if (!$this.children().length)
       $this.text($this.text().replace(matcher, newText));
  });
}

使用例は次のとおりです。

function replaceAllText() {
  replaceText('*', 'Subject:', 'Name:', 'igm');
}

$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);
0
Ziad