【问题标题】:get highest div获得最高的div
【发布时间】:2012-01-15 21:57:50
【问题描述】:

我在 stack overflor 上看到了很多东西来获得最高的 div,但没有一个对我有用。我需要获取 div preview_txt 的高度。

<div class="headline" data-rating="0.482005543693" onclick="javascript:showArticle(1076);" style="display: none; ">
    <div class="headline_txt">
        <h1>#3726: Meryl Streep schittert in The Iron Lady- alle recensies op een rijtje</h1>
    </div>
    <div class="preview_txt">
        <p>
            De eerste foto's van actrice Meryl Streep als de Britse voormalig premier Margaret Thatcher
            <a href="http://www.guardian.co.uk/film/2011/feb/08/meryl-streep-margaret-thatcher-iron-lady#">
                leidden
            </a>
            vorig jaar al tot een stortvloed aan publiciteit. Nu is
            <a href="http://www.imdb.com/title/tt1007029/">
                <em>The Iron Lady</em>
            </a>
             er dan ook echt. Vanaf vandaag draait de film in de Nederlandse bioscopen. Lees hier alle recensies. 
            <!--more-->
        </p>
    </div>                  
</div>

从我看到的东西来看,我认为我最喜欢这个:

var maxHeadLineHeight = Math.max.apply(Math, $("#headline").map(
    function(){
        return $(this).height();
    }
));

console.log("maxHeadLineHeight: "+maxHeadLineHeight);

但这给了我:

Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type

我也试过这样:

"#headline .preview_txt"

虽然在哪里,为每个标题 div 设置高度将是下一个,但这可能不会那么不同(通过获取对象)。

【问题讨论】:

    标签: jquery html


    【解决方案1】:

    代码有两个问题:

    1。您的选择器错误。

    $("#headline") 将找到 idheadline 的元素,而不是 headline

    试试这个:

    $(".headline").map(...
    

    2。你忘了在.map() 后面加上.get()

    我不确定为什么这很重要,但是与您发布的代码类似的示例都说您需要调用:

    $('<someSelectorHere>').map(function () { /* some mapping code here ... */ })
        .get(); // <-- The part you missed - won't work without it
    

    看这个例子:

    编辑:

    根据 cmets 和 jQuery 文档,调用 the .get() method 似乎很重要,因为 jQuery 返回的对象并不是真正的数组——它们只是伪装成数组。虽然有些浏览器对此没有问题(似乎是 Firefox),但其他浏览器无法处理它。所以你需要添加.get()来转换成一个真正的数组并支持那些浏览器。

    您提供的代码的工作版本演示:

    该演示中的 Javascript:

    var headlineHeights = $(".headline").map(function() {
        return $(this).height();
    }).get();
    
    var maxHeadLineHeight = Math.max.apply(Math, headlineHeights);
    
    alert("maxHeadLineHeight: " + maxHeadLineHeight);
    

    【讨论】:

    • @anonymous downvoter:告诉我我的回答有什么问题。我所说的一切都是真的——我亲手试了一下,做了一个工作演示。我找到的所有示例(在 google 上也找到了其他示例,但没有费心引用它们)都说在 map 函数之后使用 .get() 。当我在 IE 和 Chrome 下的 jsfiddle 中试用时,没有它就无法正常工作。
    • 谢谢伙计,这很好用,更好的是我也可以得到数组。不是我需要它,但仍然:)
    • @clankill3r:很高兴为您提供帮助 :) 如果我知道 .get() 是关于什么的,我会更新答案让您知道 为什么 它需要包括在内。
    • 抱歉,我以为您对 .get() 的看法是错误的,现在我无法将其更改为赞成票(显然是很久以前的事了)。顺便说一句,原因是 Firefox 接受类似数组的对象作为参数,而其他浏览器想要一个真正的数组(而 jQuery 不返回真正的数组,get() 将其转换为一个)。
    • @Johan:进行了编辑以合并您的 cmets,以及指向 .get() 的链接(其中还讨论了 jQuery 对象与数组)。如果您愿意,您现在应该可以更改投票。我对downvotes 很好,只是不是无法解释的:)
    【解决方案2】:

    嗯,这似乎在萤火虫中工作。在此页面上,以下代码给出了答案(在我的浏览器中至少为 625)。

    Math.max.apply(Math, $("#question").map(
     function(){
       return $(this).height();
     }
    ));
    

    或者显然对于其他浏览器

    Math.max.apply(Math, $("#question").map(
     function(){
       return $(this).height();
     }
    ).get());
    

    但这有点奇怪,因为在您的代码中您检查了一个 ID(它将是 0 或 1 个元素),并且最大化这很明显。所以我认为还有其他问题。如果 #question 被 .headline .preview_text 取代,我希望得到一个好的答案

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 1970-01-01
      • 2011-11-18
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2020-05-03
      相关资源
      最近更新 更多