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

我同意 Tyron 的观点,如果可以的话,您应该向 AJAX 调用添加或修改回调函数。

至于在不访问 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

您最好/最干净的方法是从进行 AJAX 调用的位置添加一个回调,并将内容插入到 div 中。

如果这对您来说是不可能的,那么如果 DOM 按照此处此处的要求进行更改,您可能会收到回调

于 2012-12-22T18:49:40.647 回答
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 回答