我一直在网上看到我正面临的这个问题..
我找不到在我的第二个嵌套循环中使用我的第一个$(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");
}
});
});
});
});
提前致谢
答案 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");
}
});
});
});
});
内部函数能够访问外部变量,因为内部函数对外部函数的变量进行了闭包。