首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将$(this)选择器传递给嵌套函数

将$(this)选择器传递给嵌套函数
EN

Stack Overflow用户
提问于 2010-12-22 00:39:18
回答 4查看 2.4K关注 0票数 4

因此,我有一个脚本,它需要遍历类名为entry-content的父DIV中的每个P标记,并使用google translate API翻译每个标记。

因此,当用户单击链接将页面从英语翻译为西班牙语时,将运行此函数:

代码语言:javascript
复制
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以将其更改为新的翻译文本。

所以我想我的问题是:如何将当前选定的元素传递给嵌套函数?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-22 00:41:33

您可以将其存储在局部变量中

this的值将始终与调用函数的上下文相关。在您的示例中,您将一个函数传递给google.language.translate,因此可能是google.language.translate调用该函数。

但是,如果在p中存储$(this)的值,则可以从回调函数中使用该变量。

代码语言:javascript
复制
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
            }
          });
        });
      });
}
票数 6
EN

Stack Overflow用户

发布于 2010-12-22 00:40:52

这是因为this在回调中更改了上下文,所以只需保留对所需元素/对象引用,如下所示:

代码语言:javascript
复制
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);
        }
      });
    });
  });
}
票数 1
EN

Stack Overflow用户

发布于 2010-12-22 00:41:25

在适当的上下文中保存'this‘的记录-否则this引用内部函数,而不是父函数。

代码语言:javascript
复制
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); 
            }
          });
        });
      });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4501627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档