每次调用变量时,如何在变量内增加一个整数?的JavaScript。
var a=0;
var t=loadXMLDoc("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+x[a].getElementsByTagName("name")[0].childNodes[0].nodeValue+"&api_key=83e386b0ba08735e3dee9b118478e56d&lang=en").getElementsByTagName("bio");
for (i=0;i<20;i++)
{
document.write("<div><button type='button' onclick='document.getElementById("+i+").innerHTML=t[0].getElementsByTagName(\"summary\")[0].childNodes[1].nodeValue;'>Open Bio</button></div>");
}
我不确定如何增加变量a。每次在for循环中调用变量t时,我都需要它增加1。
当我将所有代码放在for循环中时,我返回了[object node list],所以不需要这个方法。
答案 0 :(得分:2)
如果我正确理解了您的问题,您可以为该属性定义自己的getter和setter。
var o = {}
o.__defineSetter__('property', function(value) { this._counter = 0; this._holder = value; })
o.__defineGetter__('property', function() { console.log(this._counter++); return this._holder; })
每次为o.property分配值
时,都会重置计数器o.property = 'Some value'
然后每次访问属性时增加。 所以,
console.log(o.property)
会打印
0
Some value
到控制台。如果你再次这样做,它会打印
1
Some value
答案 1 :(得分:0)
编辑后我想我现在可以看到你的问题了。您需要将loadXMLDoc
语句放在循环中(因为您要加载20个不同的XML文件),但是您无法将每个调用的结果分配给同一个变量t
- 只需一次单击该按钮,处理程序将评估t
并仅获取最后一个值。
相反,请使用数组:
var bios = []; // empty array
for (var i=0; i<20; i++) {
var artist = x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue,
doc = loadXMLDoc("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+artist+"&api_key=83e386b0ba08735e3dee9b118478e56d&lang=en"),
bio = doc.getElementsByTagName("bio")[0].getElementsByTagName("summary")[0].childNodes[1].nodeValue;
bios[i] = bio; // store it in the array
document.write("<div><button type='button' onclick='document.getElementById("+i+").innerHTML=bios["+i+"];'>Open Bio</button></div>");
}
当然,虽然这会起作用,但这是一堆不好的做法,包括
artist
和bio
可能不是一个坏主意。document.write