【问题标题】:In jQuery (or Javascript), how do I get the "topmost" element?在 jQuery(或 Javascript)中,我如何获得“最顶层”元素?
【发布时间】:2012-03-31 14:27:39
【问题描述】:

我有一个元素列表(类“newsitem”),可以在整个页面中使用。我想要最高的元素,即该类中“最高”值最低的元素。如何有效地使用 jQuery,现在我正在迭代 newsitem 类,存储最高值并将其与迄今为止的最低值进行比较。这几乎是唯一的方法还是有实际的方法?

谢谢!

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

PPS 我有 50% 的回答率只是因为到目前为止我的 2 个问题没有相关答案。

【问题讨论】:

  • 我不知道这个有什么捷径,基本上你需要做一个jquery选择器并使用each方法和.css('top')来比较值。值得注意的是,即使有一个快捷功能,它可能仍会像您在内部一样循环,因此不会更有效率(尽管它可能看起来更好)
  • 您可以搜索适合您需求的 jquery 插件,但您永远不知道其他人是否已经解决了这个问题:)

标签: javascript jquery


【解决方案1】:

我相信这应该可行(但我还没有测试过)

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

【讨论】:

  • 我想我知道你要去哪里了,但是你认为传递给你的内联.each() 的函数中的“this”变量究竟是什么? this 具有功能级范围。我认为您想要.each( function(index, Element){...} ); 之类的东西并在Element 上操作而不是$(this)。 'this' 将是您所在的功能。参考:api.jquery.com/each
  • @DanielNWerner 我猜你误解了,从你提供的链接this.style.color = "blue"; 演示在这里使用相同的样式。 this 总是引用当前元素(你应该先看看那个页面上的例子)
  • 有趣的是 jQuery 将执行范围设置为 DOM 元素的范围,但是如果您提供了参数列表,为什么当您拥有该元素时还要使用 $(this) 进行另一个 DOM 查找呢?
  • 我只是懒得记住(索引和元素)之间哪个先出现,也许稍后 jQuery 团队决定交换它(只是愚蠢的例子)但我的代码仍然有效。
  • 这段代码有很多问题。 highest 应该是 top> 应该是<;我会将(offset.top < top) 更改为(!el || offset.top < top)... 目前,即使您修复了未声明的变量错误,这也是 lowest 元素。
【解决方案2】:

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

【讨论】:

  • $(".newsitem:first") 如果元素不按顺序将不起作用。如果第一个元素低于第二个元素,则 $(":first") 返回“第一个”元素。
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多