因此,我有一个脚本,它需要遍历类名为entry-content的父DIV中的每个P标记,并使用google translate API翻译每个标记。
因此,当用户单击链接将页面从英语翻译为西班牙语时,将运行此函数:
function spanish() {
$(".entry-content p").each(function(){
var text = $(this).html();
google.language.detect(text, function(result) {
google.language.translate(text, "en", "es", function(result) {
if (result.translation) {
alert($(this).html()); //outputs NULL
$(this).html(result.translation); //doesn't work
}
});
});
});
}问题是,当内部函数$(this).html()的iIget返回NULL时,我无法更改当前元素html以将其更改为新的翻译文本。
所以我想我的问题是:如何将当前选定的元素传递给嵌套函数?
谢谢
发布于 2010-12-22 00:41:33
您可以将其存储在局部变量中
this的值将始终与调用函数的上下文相关。在您的示例中,您将一个函数传递给google.language.translate,因此可能是google.language.translate调用该函数。
但是,如果在p中存储$(this)的值,则可以从回调函数中使用该变量。
function spanish() {
$(".entry-content p").each(function(){
var $this = $(this);
var text = $this.html();
google.language.detect(text, function(result) {
google.language.translate(text, "en", "es", function(result) {
if (result.translation) {
alert($this.html()); //outputs NULL
$this.html(result.translation); //doesn't work
}
});
});
});
}发布于 2010-12-22 00:40:52
这是因为this在回调中更改了上下文,所以只需保留对所需元素/对象引用,如下所示:
function spanish() {
$(".entry-content p").each(function(){
var text = $(this).html(), self = this;
google.language.detect(text, function(result) {
google.language.translate(text, "en", "es", function(result) {
if (result.translation) {
$(self).html(result.translation);
}
});
});
});
}发布于 2010-12-22 00:41:25
在适当的上下文中保存'this‘的记录-否则this引用内部函数,而不是父函数。
function spanish() {
$(".entry-content p").each(function(){
// Save a record of 'this' in the proper context.
var me = this;
var text = $(this).html();
google.language.detect(text, function(result) {
google.language.translate(text, "en", "es", function(result) {
if (result.translation) {
alert($(me).html());
$(me).html(result.translation);
}
});
});
});
}https://stackoverflow.com/questions/4501627
复制相似问题