我需要得到一组元素的最高left
值,这些元素都具有left
值,因为它们是用绝对位置设置的。我需要检索具有最高左值的元素,以便在我可以向此元素添加特定类之后。
window.load(function()
{
$('.elements').each(function()
{
var leftValue = $(this).offset().left;
});
});
答案 0 :(得分:2)
所有答案都忘了一件事:他询问左边最高值的元素,而不是元素中的最大值。
所以:
window.load(function()
{
var max = 0, $element;
$('.elements').each(function()
{
if($(this).offset().left > max)
{
max = $(this).offset().left;
$element = $(this);
}
}
}
最后,$element
将具有左值最高的元素
答案 1 :(得分:1)
您可以将它们添加到数组中,然后使用Math.max
获取最大数字。
var arr = [], max = 0, $elements = $('.elements');
$elements.each(function() {
arr.push($(this).offset().left);
});
max = Math.max.apply(null, arr);
然后使用$.grep
获取相关元素。
var element = $.grep($elements, function (e) {
return $(e).offset().left === max;
});
答案 2 :(得分:1)
您可以在window.load
内或任何需要的地方运行:
var max = $('.elements').toArray().reduce(function(max, elem) {
return Math.max(max, $(elem).offset().left || 0);
}, Number.NEGATIVE_INFINITY);
虽然您可以在最后一行使用0
而不是Number.NEGATIVE_INFINITY
,但这样您也可以考虑可能的负值。
JSFiddle 上的示例。
正如 @Eagle 指出的那样,这与许多答案一样,错过了OP想要的元素,而不是实际的大小。更新后的 JSFiddle 会显示对该技术的修改,而不是。
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;
答案 3 :(得分:0)
window.load(function(){
var max = 0;
$('.elements').each(function() {
var leftValue = $(this).offset().left;
if ( leftValue > max )
{
max = leftValue;
}
});
});
max
变量是最高的。
答案 4 :(得分:0)
我知道没有max
内置函数,但你可以
window.load(function(){
var maxLeft = 0;
$('.elements').each(function() {
var leftValue = $(this).offset().left;
if (leftValue > maxLeft) {
maxLeft = leftValue;
}
});
console.log(maxLeft);
});
答案 5 :(得分:0)
您需要做的是将变量保留在each
范围之外。然后,您只需将您的值与您找到的所有其他值进行比较,然后分配最高值。
window.load(function()
{
var leftValue = 0;
$('.elements').each(function()
{
maxLeft = $(this).offset().left;
if (maxLeft > leftValue)
{
leftValue = maxLeft;
}
});
});
答案 6 :(得分:0)
这里有一个使用递归的替代方法:http://jsfiddle.net/wared/Y762p/。请注意,您现在可以在不重新启动小提琴的情况下调整演示面板的大小。
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);
};
与previous version相比的变化:
sel
参数,以防止错误使用和错误。