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更喜欢哪种行为,但值得注意的是,这是一个有趣的区别。一些调整:。一些调整:。