这是我想要完成的基本想法,我有一个清单......
<ul>
<li position="400">Item 1</li>
<li position="510">Item 2</li>
<li position="590">Item 3</li>
<li position="614">Item 4</li>
</ul>
我想做的是根据数字选择最接近的项目。
如果我们的随机数是490,它会将“选定”类添加到列表项目2中。
但是我不知道怎么做,或者甚至可能......我这样做是为了导航,所以...
var position = $(window).scrollTop();
然后在按键上,选择列表项,其中position属性最接近“position”变量。我有道理吗?
如果有人能帮助我解决这个问题,我会很感激,我很失落
答案 0 :(得分:2)
function selectClosest(val){
var diffs = [];
$("li[position]").each(function(){
diffs.push(Math.abs(parseInt($(this).attr("position"))-val));
});
$("li[position]").eq(diffs.indexOf(Math.min.apply( Math,diffs))).css("font-weight","bold");
}
selectClosest(551);
答案 1 :(得分:1)
我相信你可以对一系列职位进行二元搜索: 只需创建一个位置数组,按“position”属性排序,然后进行二进制搜索:
var positions = [];
$("[position]").sort(function (a, b) {
return $(a).attr("position") - $(b).attr("position")
})
.each(function () {
positions.push(parseInt($(this).attr("position")));
});
答案 2 :(得分:0)
使用此帖Formal way of getting closest values in array in Javascript, given a value and a sorted array?上的解决方案,您可以执行以下操作:http://jsfiddle.net/elclanrs/phFUq/
var num = 600, // scroll number
$li = $('li'),
pos = [];
$li.each(function() {
pos.push($(this).attr('position'));
});
function sortfunc(a, b) { // To sort `pos` array
return a - b;
}
var getClosestValues = function(a, x) {
var lo, hi;
for (var i = a.length; i--;) {
if (a[i] <= x && (lo === undefined || lo < a[i])) lo = a[i];
if (a[i] >= x && (hi === undefined || hi > a[i])) hi = a[i];
};
return [lo, hi];
};
$('li[position=' +
getClosestValues(pos.sort(sortfunc), num)[0] +
']').toggleClass('red'); // Or whatever...