HTML
<div id="result">
<!-- one of many choices -->
<div data-votes="9">
<div class="meter"></div>
Choice name <span>9 Votes</span>
</div>
</div>
我正在尝试根据它的投票数设置每个.meter
的宽度:
的jQuery
$('#result').find('>div').each( function () {
total_votes += $(this).data('votes');
console.log(total_votes);
console.log('testlog');
});
console.log
都没有工作。 total_votes
的值在此部分后保留0
。
即使console.log($('#result').find('>div').eq(0).data('votes'));
无效,也会打印出null
但是如果我在控制台中使用相同的代码,它可以正常工作。
> $('#result').find('>div').eq(1).data('votes')
15
> typeof $('#result').find('>div').eq(1).data('votes')
"number"
答案 0 :(得分:1)
嗯,虽然代码还有其他一些问题,但问题似乎是时间问题,因为它在控制台中工作。
确保代码仅在文档准备就绪时执行:
$(function () {
//your code goes here
});
最后,正如评论中所述,请使用.children("div")
代替.find(">div")
。您也可以仅使用.children('[data-votes]')
答案 1 :(得分:0)
在编写代码时,total_votes
变量是.each()
回调的本地变量,因此每次循环开始时它都会被重置,并在循环结束后立即被遗忘。
您需要在循环之前初始化total_votes
:
var total_votes = 0;
$('#result').find('>div').each( function () {