在以下代码中:
for (i=0; i<itemsinlist.length; i++) {
var rating = document.createElement('div');
itemsinlist[i].appendChild(rating);
rating.className = "rating";
rating.id = "thumbnails" +i;
for (x=0; x<4; x++) {
star = document.createElement('span');
star.innerHTML = "★";
star.className = "star";
star.setAttribute("onclick", "ratingsSet("+i+","+x+");");
rating.appendChild(star);
} //createratingsstars
我正在努力理解star.setAttribute()
的第二个参数,在这一行中:
star.setAttribute("onclick", "ratingsSet("+i+","+x+");");
具体来说,我被+i+
和+x+
甩了。
起初我认为这些是增量运算符的某种变化,但后来决定它必须连接一些东西,但我无法弄清楚是什么/如何。循环生成的HTML是:
<span class="star" onclick="ratingsSet(0,0);">*</span>
<span class="star" onclick="ratingsSet(0,1);">*</span>
<span class="star" onclick="ratingsSet(0,2);">*</span>
<span class="star" onclick="ratingsSet(0,3);">*</span>
但我的反向工程印章让我失望(如果我有任何开始的话)。
帮助?
答案 0 :(得分:4)
这是字符串连接。 i
是外循环计数器,x
是内循环计数器。它似乎是在迭代一个集合并为每个项目创建4个跨度。
答案 1 :(得分:4)
它正在整理这个字符串:
"ratingsSet(0,1);"
值0
位于变量i
中,值1
位于变量x
中。如果我们添加一些空格,可能会更清楚:
"ratingsSet(" + i + "," + x + ");"
答案 2 :(得分:1)
据我可以告诉它增加i
和x
并为click元素设置属性:
"ratingsSet("+i+","+x+");"
然后点击ratingsSet("+i+","+x+");
后执行params。
奇怪的做法。
答案 3 :(得分:1)
您可以拥有更易读的代码:
star.onclick = function() {
ratingsSet(i, x);
};
将事件处理程序设置为旧浏览器中的属性中断,而不是非常优雅。
答案 4 :(得分:0)
JavaScript允许您使用plus运算符连接字符串和整数(以及AFAIK,任何对象的字符串表示形式)。生成的HTML(带有嵌入式JavaScript!)就是:ratingsSet()
调用的实例化。
答案 5 :(得分:0)
“+”是连接两个字符串的中缀运算符。
示例:“mor”+“ning”将给出字符串“morning”。
所以它只是将i或x的值打印到HTML。
答案 6 :(得分:-2)
我有同样的问题,现在我知道我犯了一个有趣的错误。你必须像我一样以错误的方式阅读这个陈述。这第二个参数需要一个字符串,所以“ratings(”+ i +“,”+ x +“);”意味着
“ratingsSet(” +
我
+ “ ”+
X
+“):”
所以这个参数将成为一个字符串。没有+ x +
:)