-1

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

4

2 回答 2

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
于 2013-03-28T16:05:51.877 回答
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 更改其格式,您将在这里遇到很多异常。您现在可能确定这永远不会发生,但是包装artistbio在 try-catch 中可能不是一个坏主意。
  • 同步的 A jax。一个人可以做得比这更好。
  • 即使您不需要它们,也可以加载 20 个文档(并且按顺序加载!)。仅在单击相应按钮时才尝试加载它们中的每一个可能是值得的。
  • document.write
  • 内联属性事件处理程序
  • …甚至通过 JS 创建它们。
于 2013-04-03T20:23:44.727 回答