0

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"
4

2 回答 2

1

好吧,虽然代码还有一些其他问题,但问题似乎是时间问题,因为它在控制台中工作。

确保您的代码仅在文档准备好时执行:

$(function () {
    //your code goes here
});

最后,如评论中所述,使用.children("div")代替.find(">div"). 您也可以仅通过使用来定位具有此属性的孩子.children('[data-votes]')

于 2013-09-04T14:39:49.593 回答
0

在编写代码时,该total_votes变量是.each()回调的本地变量,因此每次循环开始时都会重置它,而一旦循环结束,它就会被遗忘。

您需要total_votes在循环之前进行初始化:

var total_votes = 0;

$('#result').find('>div').each( function () {

http://jsfiddle.net/mblase75/k46aB/

于 2013-09-04T14:29:09.660 回答