有没有一种方法可以根据包含整数的最接近属性来确定项目的目标

Is there a way to target an item based on the closest attribute which contains an integer?

本文关键字:属性 最接近 整数 目标 项目 包含 一种 方法 有没有      更新时间:2023-09-26

以下是我想要完成的基本想法,我有一个列表。。。

<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"变量的列表项。我说得通吗?

如果有人能帮我完成这件事,我会很感激,我失去了

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);

我相信你可以在一个位置数组上进行二进制搜索:只需创建一个位置数组,按"位置"属性排序,然后进行二进制搜索:

var positions = [];
$("[position]").sort(function (a, b) {
    return $(a).attr("position") - $(b).attr("position")
})
.each(function () {
    positions.push(parseInt($(this).attr("position")));
}); 

在这个post上使用解决方案在Javascript中获得数组中最接近的值,给定一个值和一个排序的数组?你可以这样做: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...