我试图像facebook一样创建一些“插件”按钮。 但是我的循环只渲染了第一个div。而不是其他div。为什么呢?
<style>body{background: #ccc;}</style>
<div name="q" data-id="3" data-width="200"></div>
<div name="q" data-id="1" data-width="300"></div>
<div name="q" data-id="1" data-width="400"></div>
<script>
var s = document.getElementsByName("q");
for (var i = 0; i < s.length; i++) {
e = s[i];
w = e.attributes['data-width'].value;
i = e.attributes['data-id'].value;
var o={};
o.iframe = document.createElement('iframe');
o.iframe.setAttribute('src', 'http://resources2.news.com.au/images/2012/09/27/1226482/758034-tardar-sauce-the-cat.jpg');
o.iframe.width = w;
o.iframe.height = w + 100;
o.iframe.border = 0;
o.iframe.setAttribute('style', 'border: 0;overflow: visible;');
e.appendChild(o.iframe);
console.log('id:'+i+' width:'+w);
}
</script>
答案 0 :(得分:2)
您使用变量i
作为循环计数器,并在循环内部。
在第一次迭代中,您将值"3"
分配给变量i
。在3
语句中进行比较时,它将转换为数字for
,并且因为它超过了数组的长度,所以循环在第一次迭代后结束。
为在循环中保存data-id的变量使用不同的变量名。
iframe规模的问题在于:
o.iframe.height = w + 100;
变量w
包含一个字符串,例如"200"
,当+
运算符的任何操作数是字符串时,它将执行字符串连接。因此,结果不是300
,而是"200100"
。你的iframe高几千像素。
您需要在计算中使用数字:
o.iframe.height = parseInt(w) + 100;
答案 1 :(得分:1)
i
。在循环中更改此声明的名称:
newNameForVar = e.attributes['data-id'].value;