我正忙着创建一个讲台类型的屏幕,该屏幕将识别哪个人得分最高,然后将他们放入相对位置。
示例:给定此表:
+-------+-------+
| name | score |
+-------+-------+
| Mike | 3 |
| Kevin | 14 |
| John | 6 |
+-------+-------+
凯文将成为冠军,约翰排名第二,麦克排名第三。
我如何使用Jquery得出这个结论?我设法浏览互联网,找出谁得分最高,然后得到他/她的名字。但我现在仍然坚持要找出谁是第二名,谁是第三名。
这是我到目前为止所做的:
$( document ).ready(function() {
var max = 0;
var name;
$('#HoldingPodiumData, .score').each(function()
{
$this = parseFloat( $(this).html() );
if ($this > max)
{
max = $this;
//name = $('.names').html();
name = $(this).closest('td').prev('td').html()
}
});
alert(max);
alert(name);
$("#winner").html(name);
});
有人能帮我正确的方向吗?我创建了迄今为止我所取得的FIDDLE
谢谢! 麦克
答案 0 :(得分:4)
这就是我要做的事情:
var max = 0;
var names = [];
$('#HoldingPodiumData tr:gt(0)').each(function()
{
if ($(this).find(".score").length > 0)
{
names.push({
score: parseFloat($(this).find(".score").html()),
name: $(this).find(".names").html()
});
}
});
names = names.sort(function(a, b)
{
return b.score - a.score;
});
$("#winner").html(names[0].name);
$("#second").html(names[1].name);
$("#third").html(names[2].name);
Fiddle。说明:
tr
,跳过第一个; tr
是否有.score
子元素; names
; 我认为这不是最好的方法,但它并没有改变你的代码。这里的诀窍是sort()
函数,你应该看看它。
答案 1 :(得分:2)
您需要将设置max
的部分更改为新的第一个位置。相反,如果找到比当前第一名更好的人,请保持长度为3且移位的数组。
您可以通过保留其他名称数组来维护名称旁边的分数。
if ($this > scores[0])
{
scores[2] = scores[1];
scores[1] = scores[0];
scores[0] = $this;
names[2] = names[1];
names[1] = names[0];
names[0] = $(this).closest('td').prev('td').html();
}
代码完成后,您的第一名获奖者将在scores[0]
,第二名将在scores[1]
,第三名将在scores[2]
。
作为保留两个单独数组的替代方法,您可以定义具有名称和分数属性的对象。
答案 2 :(得分:-1)
var scoresSorted = $('.score').map(function () { return +$(this).text(); }).get().sort(function(a, b){return b-a});
$('#winner').text( $('td:contains('+scoresSorted[0]+')').prev().text() )
$('#second').text( scoresSorted[1] )
$('#third').text( scoresSorted[2] )
<强> jsFiddle example 强>
第一行收集值,将它们放在一个数组中,然后对它们进行排序。第二行使用数组的第一个值(最高)来查找匹配的名称。最后两行从数组中得到第二和第三位值(索引1和2)。