在第二个forEach()中使用第一个$(this)

时间:2016-03-17 09:36:12

标签: javascript jquery

我一直在网上看到我正面临的这个问题..

我找不到在我的第二个嵌套循环中使用我的第一个$(this)的方法。 我想像Php做别名吗?

有人知道是否可能吗?

您可以在下面看到我的代码来表示问题。

$(".btn-labeled").click(function()
{
  var uid = $(this).parent().prev("td").html();
  $.get( "?what="+uid, function( data ) {
  var parsedJson =  JSON.parse(data);

  $(".rule").each(function()
  {
    var serviceAccount = $(this).children("td").html();
    parsedJson.forEach(function(iteration)
    {
      if(iteration["service_account"] != serviceAccount)
      {
        //I want this to be attached to first loop :p
        $(this).children("td").next("td").children("div").children("input").removeAttr("checked");
      }
    });

  });


    });
});

提前致谢

4 个答案:

答案 0 :(得分:2)

在内部循环中创建一个变量element引用:

$(".btn-labeled").click(function()
{
  var uid = $(this).parent().prev("td").html();
  $.get( "?what="+uid, function( data ) {
  var parsedJson =  JSON.parse(data);

  $(".rule").each(function()
  {
   var element = $(this);//here
    var serviceAccount = $(this).children("td").html();
    parsedJson.forEach(function(iteration)
    {
      if(iteration["service_account"] != serviceAccount)
      {
       element.children("td").next("td").children("div").children("input").removeAttr("checked");
      }
    });

  });


    });
});

答案 1 :(得分:1)

您可以将外部上下文对象设置为变量,然后在内部使用它:

 $(".rule").each(function(){
var obj= $(this);
var serviceAccount = $(this).children("td").html();
parsedJson.forEach(function(iteration)
{
  if(iteration["service_account"] != serviceAccount)
  {
    //I want this to be attached to first loop :p
    obj.children("td").next("td").children("div").children("input").removeAttr("checked");
  }
 });
});

答案 2 :(得分:1)

只需将$(this)分配给变量,然后在那之后使用该变量。

var $this = $(this);

$(".btn-labeled").click(function()
{
  var uid = $(this).parent().prev("td").html();     

  $.get( "?what="+uid, function( data ) {
  var parsedJson =  JSON.parse(data);

  $(".rule").each(function()
  {

    var $this = $(this); // assign $(this) to a new variable

    var serviceAccount = $(this).children("td").html();
    parsedJson.forEach(function(iteration)
    {
      if(iteration["service_account"] != serviceAccount)
      {
        //Use that variable
        $this.children("td").next("td").children("div").children("input").removeAttr("checked");
      }
    });

  });


    });
});

答案 3 :(得分:1)

Javascript中this的范围是动态范围。这取决于函数的调用方式,而不是作者如何编写代码(如词法范围)

所以你的代码应该是这样的

$(".btn-labeled").click(function()
{
  var uid = $(this).parent().prev("td").html();
  $.get( "?what="+uid, function( data ) {
  var parsedJson =  JSON.parse(data);
  // save reference to this also it is good idea to prefix variables containing jQuery objects with a $
  var $outer_this = $(this) 
  $(".rule").each(function()
  {
    var serviceAccount = $outer_this.children("td").html();
    parsedJson.forEach(function(iteration)
    {
      if(iteration["service_account"] != serviceAccount)
      {
        //I want this to be attached to first loop :p
        $outer_this.children("td").next("td").children("div").children("input").removeAttr("checked");
      }
    });

  });


    });
});

内部函数能够访问外部变量,因为内部函数对外部函数的变量进行了闭包。