每次调用该变量时,如何在变量内增加一个整数?使用Javascript

时间:2013-03-28 15:45:48

标签: javascript integer increment

每次调用变量时,如何在变量内增加一个整数?的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],所以不需要这个方法。

2 个答案:

答案 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>");
}

当然,虽然这会起作用,但这是一堆不好的做法,包括

  • 对DOM节点/属性进行不安全的访问。如果xml更改其格式,您将在此处获得许多例外。您现在可能确定这种情况从未发生过,但在try-catch中包装artistbio可能不是一个坏主意。
  • snychronous A jax。人们可以做得更好。
  • 即使您不需要,也可以加载20个文件(以及顺序!)只有在单击相应的按钮时才可能尝试加载它们。
  • document.write
  • 内联属性事件处理程序
  • ......甚至可以通过JS创建它们。