2014-05-21 71 views
0

我有这样一段代码。每()函数内部jQuery的变量

var temp = "text " + this.link + " text"; 

$(data.query.results.item).each(function() { 
    alert(temp); 
}); 

当惊动它返回 “文本未定义文本”

但如果我这样做

$(data.query.results.item).each(function() { 
    alert("text " + this.link + " text"); 
}); 

它返回正确的值

为什么会发生这种情况,我如何才能使其工作?

感谢

+2

在你的第一个例子中这是什么范围? –

+1

什么是第一个代码片段中的this.link? –

+0

如果'temp'是一个全局变量,那么'this'将引用'window'对象。 – Rohit416

回答

1

this.link是不是从each环的外部访问。您只能从each范围访问this上下文。如果要定义循环的一些“模板” ouside,你可以尝试使用:

var temp = "text %link% text"; 

$(data.query.results.item).each(function() { 
    alert(temp.replace('%link%', this.link)); 
}); 
+0

如果'.each'已经被另一个'.each'包裹了怎么办? –

+1

@RajaprabhuAravindasamy然后它应该工作。 – hsz

+0

那么,如果我想更多地放入模板,就像var temp =“text%link%text%image%text%title%”一样。我怎样才能取代所有这些没有声明this.link,this.image,this.title每个。 –

0

因为this总是指当前对象。

var temp = "text " + this.link + " text"; 

这里this是不确定的,这就是为什么它显示该消息。

1

this参考上下文/范围在那里执行,你this每天的外执行,这就是为什么它是未定义 -

你可以尝试这样的事情 -

function getText(item){ 
    var temp = "text " + item.link + " text"; 
} 

$(data.query.results.item).each(function() { 
    alert(getText(this)); 
}); 
+0

我会更进一步,只将'this.link'传递给'getText'函数。 – hsz

+0

@hsz当然,但是项目可能有OP可能希望包含在文本中的另一个属性(_ future_) –

+0

另一方面 - 它不能用于其他类型的项目。我们只能推测。 ;-) – hsz

0

为什么不要以这种方式使用每种方法!

$.each(data.query.results.item, function(index, value) { 
    alert("text " + value.link); 
});