我正在使用.each遍历页面上的元素并查看最大底部值。脚本似乎没问题,只是两个值之间的简单检查会返回一些奇怪的东西,我无法直接弄清楚我做错了什么。
这是我的div设置:
<div id="zone1" data-top="38" data-bottom="1648" data-left="131" data-width="467" data-group="0">...</div>
<div id="zone2" data-top="38" data-bottom="957" data-left="597" data-width="467" data-group="0">...</div>
<div id="zone3" data-top="38" data-bottom="4508" data-left="1064" data-width="467" data-group="0">...</div>
现在脚本:
maxb = 0;
console.log('init max '+maxb);
$('[data-group=0]').each(function()
{
tempb = $(this).attr('data-bottom');
console.log(tempb+' '+maxb);
if (tempb>maxb)
{
maxb = tempb;
}
console.log(tempb+' '+maxb);
});
此脚本的目标是存储数据组0的最大数据底值。
如果我现在查看我的控制台输出:
init max 0
1648 0
1648 1648
957 1648
957 957
4508 957
4508 957
因此maxb被正确初始化。第一个数据底部大于0,因此maxb取这个值,但第二次迭代很奇怪,因为957低于1648,maxb应该仍然是1648但是它需要957作为最大值并保持到最后。这就像IF条件不能正常工作但我可能需要一些睡眠,我不知道问题出在哪里。
由于 劳伦
答案 0 :(得分:3)
这是因为您在这里比较字符串值 - 这意味着&#34;排序&#34; RESP。比较是按字符逐个发生的。
根据该指标,当然957大于1648 - 因为它以字符9
开头,并且大于1
。因此,比较在此结束,并得出结论957大于1648。
首先使用parseInt
:
tempb = parseInt($(this).attr('data-bottom'), 10);
答案 1 :(得分:1)
你确定这些数字被视为整数吗?我知道你可以使用parseInt()来获取javascript来强制将字符串视为一个数字,但我懒惰所以我总是乘以1,这基本上是相同的。
基本上,您只需将代码更改为:
tempb = $(this).attr('data-bottom')*1;
答案 2 :(得分:1)
请参阅我的working example了解构建值数组的方法,然后从中获取最大值。
来源:jquery .each - strange calculation
<强>文档强>
遍历对象值并将.push()
迭代到数组中。
var botArray = [];
$('[data-group=0]').each(function() {
var item = parseInt($(this).attr('data-bottom'), 10);
botArray.push(item);
});
var max = Array.prototype.max = function() {
return Math.max.apply(null, botArray);
};
//https://stackoverflow.com/a/1669222/5076162
var botArray = [];
$('[data-group=0]').each(function() {
var item = parseInt($(this).attr('data-bottom'), 10);
botArray.push(item);
});
var max = Array.prototype.max = function() {
return Math.max.apply(null, botArray);
};
$('.maxItem').text(max);
&#13;
.maxItem {
color: orange;
}
p {
font-family: arial;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id="zone1" data-top="38" data-bottom="1648" data-left="131" data-width="467" data-group="0">...</div>
<div id="zone2" data-top="38" data-bottom="957" data-left="597" data-width="467" data-group="0">...</div>
<div id="zone3" data-top="38" data-bottom="4508" data-left="1064" data-width="467" data-group="0">...</div>
<p>
data-bottom max value is: <span class='maxItem'></span>
</p>
&#13;