0

jQueryでいくつかのフレーズを翻訳しようとしています。このコードはほとんどうまく機能します:

changeText = function(text, newText){
var currentText = $('span.example').html();  
$('span.example').html(currentText.replace(text,newText)); };
window.setTimeout(function(){changeText("TranslateMe", "Translation")}, 0000);

ただし、ajax によって生成された結果を待っている場合は、ほとんど役に立ちません。明確にするために、これは次の手順の検索スクリプトです。

  1. [検索] をクリックすると、ページの一部が「通常どおり」読み込まれます。これらのテキスト文字列は問題なく変更できます。

  2. その後、ajaxを介して動的にロードされた結果があり、divの「ブロック」が次々にロードされます。これらのフレーズは翻訳されません。

回避策は、すべてがロードされるまでしばらく待ってから、一部のパーツが機能するようにすることです。例:

window.setTimeout(function(){changeText("TranslateMe", "Translation")}, 20000);

ただし、ユーザーはしばらくの間、翻訳されていない文字列をそのように見るため、これは良い解決策ではありません。

したがって、表示される文字列を変更するソリューションを探しています。それを行う方法はありますか?

前もって感謝します!

編集:

チャーリーのアプローチを試す:

<script>
changeText = function(text, newText, $el) { 

$el.html(function(i, currentText){
    return currentText.replace(text, newText);
});    
};

$(function(){
changeText(text, newText,$('span.example'));
});

$.ajax({
  success:function(data){
        var $changeEl=$(data).find('span.example');
        changeText(text, newText,$changeEl);

var currentText = $('span.example').html();  
$('span.example').html(currentText.replace(TranslateMe,Translation));
};

  })
})
</script>
4

3 に答える 3

0

可能であれば、AJAX呼び出しにコールバック関数を追加または変更する必要があるというTyronに同意します。

変更を検出し、ajaxにアクセスせずに翻訳することに関して。このようなものが役立つかもしれません。

var c = document.getElementById('[ID OF CONTAINER FOR  UNTRANSLATED BLOCKS]');
c.__appendChild = c.appendChild;

//this function catches the element before it is appended
c.appendChild = function(){

    //this applies the change
    c.__appendChild.apply(c, arguments);

    var newBlock = $(c).children().last();
    //this hides the newly added block
    newBlock.hide();
    // now perform your translations on the newBlock contents
        //here
    // and then make the block visible again
    newBlock.show();
};
于 2012-12-22T19:11:20.793 に答える
0

関数を変更してコンテキスト引数を追加すると、次のようなことができます。

changeText = function(text, newText, $el) { 
     /* html method allows for function as argument to modify element*/
    $el.html(function(i, currentText){
        return currentText.replace(text, newText);
    });    
};

次に、ページの読み込み時に:

$(function(){
    changeText( text, newText,$('span.example'));
});

AJAX の成功では、新しい要素を探して変更します。

$.ajax({
      success:function(data){
            var $changeEl=$(data).find('span.example');
            changeText( text, newText,$changeEl);
           /* your code that inserts the new html here*/
      })
})
于 2012-12-22T19:19:28.053 に答える
0

あなたの最善/最もクリーンなアプローチは、AJAX 呼び出しが行われ、コンテンツが div に挿入された場所からコールバックを追加することです。

それが不可能な場合は、ここここで尋ねられたように DOM が変更された場合にコールバックを受け取る可能性があります。

于 2012-12-22T18:49:40.647 に答える