Javascript 我怎样才能得到最高的报价;“左”;使用jquery的一组元素的值?

Javascript 我怎样才能得到最高的报价;“左”;使用jquery的一组元素的值?,javascript,jquery,offset,absolute,highest,Javascript,Jquery,Offset,Absolute,Highest,我需要得到一组元素的最高left值,这些元素都有left值,因为它们是用绝对位置设置的。我需要检索左上角值为的元素,以便在向该元素添加特定类之后 window.load(function() { $('.elements').each(function() { var leftValue = $(this).offset().left; }); }); max变量是最高的 max变量是最高的。我知道没有max内置函数,但您可以 window.load(

我需要得到一组元素的最高
left
值,这些元素都有
left
值,因为它们是用绝对位置设置的。我需要检索左上角值为的元素,以便在向该元素添加特定类之后

window.load(function()
{
    $('.elements').each(function() 
    {
        var leftValue = $(this).offset().left;
    });
});
max
变量是最高的


max
变量是最高的。

我知道没有
max
内置函数,但您可以

window.load(function(){
    var maxLeft = 0;

    $('.elements').each(function() {
        var leftValue = $(this).offset().left;
        if (leftValue > maxLeft) {
            maxLeft = leftValue;
        }
    });

    console.log(maxLeft);
});

我知道没有
max
内置函数,但您可以

window.load(function(){
    var maxLeft = 0;

    $('.elements').each(function() {
        var leftValue = $(this).offset().left;
        if (leftValue > maxLeft) {
            maxLeft = leftValue;
        }
    });

    console.log(maxLeft);
});

您可以将它们添加到数组中,然后使用来获取最大的数字

var arr = [], max = 0, $elements = $('.elements');

$elements.each(function() {
  arr.push($(this).offset().left);
});

max = Math.max.apply(null, arr);
然后使用抓取相关元素

var element = $.grep($elements, function (e) {
  return $(e).offset().left === max;
});

您可以将它们添加到数组中,然后使用来获取最大的数字

var arr = [], max = 0, $elements = $('.elements');

$elements.each(function() {
  arr.push($(this).offset().left);
});

max = Math.max.apply(null, arr);
然后使用抓取相关元素

var element = $.grep($elements, function (e) {
  return $(e).offset().left === max;
});

您需要做的是将一个变量保持在
每个
的范围之外。然后,您只需将您的价值与您找到的所有其他价值进行比较,并在运行时分配最高的价值

window.load(function()
{
    var leftValue = 0;
    $('.elements').each(function() 
    {
        maxLeft = $(this).offset().left;
        if (maxLeft > leftValue) 
        {
            leftValue = maxLeft;
        }
    });
});

您需要做的是将一个变量保持在
每个
的范围之外。然后,您只需将您的价值与您找到的所有其他价值进行比较,并在运行时分配最高的价值

window.load(function()
{
    var leftValue = 0;
    $('.elements').each(function() 
    {
        maxLeft = $(this).offset().left;
        if (maxLeft > leftValue) 
        {
            leftValue = maxLeft;
        }
    });
});

您可以在
窗口内运行此操作。加载
或在需要的任何位置:

var max = $('.elements').toArray().reduce(function(max, elem) {
    return Math.max(max, $(elem).offset().left || 0);
}, Number.NEGATIVE_INFINITY);
虽然您可以在最后一行中使用
0
,而不是
Number.NEGATIVE _∞
,但这样您也可以考虑可能的负值

上的示例


更新 正如所指出的,与许多答案一样,这忽略了OP想要的是元素,而不是实际的大小。更新的显示了对该技术的修改,以实现这一点

var maxElem = $('.elements').toArray().reduce(function(curr, elem) {
    var left = $(elem).offset().left;
    return left > curr.val ? {elem: elem, val: left} : curr 
}, {elem: null, val: Number.NEGATIVE_INFINITY}).elem;

您可以在
窗口内运行此操作。加载
或在需要的任何位置:

var max = $('.elements').toArray().reduce(function(max, elem) {
    return Math.max(max, $(elem).offset().left || 0);
}, Number.NEGATIVE_INFINITY);
虽然您可以在最后一行中使用
0
,而不是
Number.NEGATIVE _∞
,但这样您也可以考虑可能的负值

上的示例


更新 正如所指出的,与许多答案一样,这忽略了OP想要的是元素,而不是实际的大小。更新的显示了对该技术的修改,以实现这一点

var maxElem = $('.elements').toArray().reduce(function(curr, elem) {
    var left = $(elem).offset().left;
    return left > curr.val ? {elem: elem, val: left} : curr 
}, {elem: null, val: Number.NEGATIVE_INFINITY}).elem;

所有答案都忘记了一件事:他问的是左上角值最高的元素,而不是元素中的最大值

因此:


最后,
$element
将有左值最高的元素

所有答案都忘记了一件事:他询问左值最高的元素,而不是元素中的最大值

因此:


最后,
$element
将具有左值最高的元素

这里有一个使用递归的替代方法:。请注意,您现在可以调整演示面板的大小,而无需重新启动小提琴

var els = $('.elements').get();
var $el = mostLeft(els);

function mostLeft(list) {    
    var biggestLeft; // saves "left" to reduce calls to .offset()
    return function rec(list) {
        var sel, $el, left; // "sel" means "selection"
        if (list.length) {
            $el = $(list[0]);
            left = $el.offset().left;
            sel = rec(list.slice(1));
            if (!sel || left > biggestLeft) {
                biggestLeft = left;
                sel = $el;
            } 
            return sel;
        }
    }(list);    
};
与之相比的变化:

  • 原始元素列表不再被修改,因此可以重复使用
  • 删除了
    sel
    参数以防止错误使用和bug

    • 这里有一个使用递归的替代方法:。请注意,您现在可以调整演示面板的大小,而无需重新启动小提琴

      var els = $('.elements').get();
      var $el = mostLeft(els);
      
      function mostLeft(list) {    
          var biggestLeft; // saves "left" to reduce calls to .offset()
          return function rec(list) {
              var sel, $el, left; // "sel" means "selection"
              if (list.length) {
                  $el = $(list[0]);
                  left = $el.offset().left;
                  sel = rec(list.slice(1));
                  if (!sel || left > biggestLeft) {
                      biggestLeft = left;
                      sel = $el;
                  } 
                  return sel;
              }
          }(list);    
      };
      
      与之相比的变化:

      • 原始元素列表不再被修改,因此可以重复使用
      • 删除了
        sel
        参数以防止错误使用和bug

      谢谢!但奇怪的是,我得到的是元素的宽度,而不是左值。。。这会是什么?谢谢!但奇怪的是,我得到的是元素的宽度,而不是左值。。。这可能是什么?我尝试了你的代码,在添加了两个变量的console.log之后。我没有得到最高的价值。之后,我希望以最高值的元素为目标。你是怎么做到的?@DanielRamirez-Escudero:你能设置一个JSFiddle、JSBin、Codepen、Plunkr,或者其他一些东西来展示你在做什么吗?这段代码看起来应该可以工作。我尝试了您的代码,在添加了带有这两个变量的console.log之后。我没有得到最高的价值。之后,我希望以最高值的元素为目标。你是怎么做到的?@DanielRamirez-Escudero:你能设置一个JSFiddle、JSBin、Codepen、Plunkr,或者其他一些东西来展示你在做什么吗?这段代码看起来确实应该可以工作。这与我的代码有一个有趣的区别,OP可能想要,也可能不想要。我的将只选择一个具有最大偏移量的DIV,即使有几个DIV具有相同的值(文档顺序中的第一个,假设jQuery仍然是这样工作的)。您的将选择所有具有该最大值的DIV。我不确定OP会喜欢哪种行为,但值得注意的是,这与我的行为有一个有趣的区别,OP可能想要,也可能不想要。我的将只选择一个具有最大偏移量的DIV,即使有几个DIV具有相同的值(文档顺序中的第一个,假设jQuery仍然是这样工作的)。您的将选择所有具有该最大值的DIV。我不确定OP更喜欢哪种行为,但值得注意的是,这是一个有趣的区别。一些调整:。一些调整:。