2012-03-15 144 views
2

我有一个元素列表(带有“newsitem”类),可在整个页面中使用。我想要最高的元素,也就是该类中具有最低“最高”值的元素。如何有效地获取jQuery,现在我正在迭代newsitem类,存储最高值并将其与最低值进行比较。这几乎是唯一的方法来做到这一点,或者有一个实际的方法吗?在jQuery(或Javascript)中,如何获得“最顶层”元素?

谢谢!

PS:这种方法是最接近我在做什么现在:How to get height of the highest children element in javascript/jQuery?

PPS我有50%的回答率,只是因为我的问题2至今没有相关的答案。

+0

我不知道任何快捷方式这一块,基本上你需要做一个jquery选择器并使用'each'方法和'.css('top')'来比较值。值得注意的是,即使有这个快捷方式,它可能仍然会循环,就像你在内部一样,因此效率可能不会更高(尽管它看起来更好) – joshuahealy 2012-03-15 03:58:29

+0

你可以搜索一个jQuery插件,虽然适合你的需求,但你永远不知道这是否已经被其他人解决:) – joshuahealy 2012-03-15 03:59:57

回答

2

我认为这应该工作(但我没有测试它尚未)

function get_topmost_element(selector) { 
    var top = 0, 
     el; 
    $(selector).each(function(){ 
     var offset = $(this).offset(); 
     if (offset.top > top) { 
      highest = offset.top; 
      el = $(this); 
     } 
    }); 

    return el; 
} 

使用

get_topmost_element('.newsitem'); 
+0

我想我会得到你要去的地方,但是你认为'this'变量会在函数中传递给你的'.each()'吗? 'this'具有功能级范围。我想你想要的东西像'.each(function(index,Element){...}); '并在'Element'而不是$(this)上操作。 'this'将会是你所在的函数。参考:http://api.jquery.com/each/ – dwerner 2012-03-15 04:44:39

+0

@DanielNWerner我想你误解了,你提供的链接'this.style.color =“blue”; '演示在这里使用相同的风格。 'this'总是指当前元素(你应该先看看那个页面上的例子) – Rezigned 2012-03-15 05:02:30

+0

有趣的是,jQuery将执行范围设置为DOM元素的执行范围,但为什么还要用$(this )如果你提供了一个参数列表,当你有元素时? – dwerner 2012-03-15 05:20:47

0

我想$(".newsitem:first")应该这样做。

+1

$(“。newsitem:first”)不起作用,如果元素不按顺序。如果第一个元素低于第二个元素,$(“:first”)返回“first”元素。 – StackOverflowed 2012-03-16 02:48:00