【问题标题】:jquery compare the height beneath img to h2's heightjquery比较img下面的高度和h2的高度
【发布时间】:2012-02-23 16:54:54
【问题描述】:

我正在尝试适应这个:

var h2=$('.block h2');
var divh=$('.block').height();
while ($(h2).outerHeight()>divh) {
    alert('enters while');
    $(h2).text(function (index, text) {
        return text.replace(/\W*\s(\S)*$/, '...');
    });
}

这里解释:Cross browsers mult-lines text overflow with ellipsis appended within a width&height fixed div?

我遇到的问题是我有各种li,其中每个都包含一个.block,每个li都有一个h2标签

例子:

<li>
<div class="block">
....
<h2>Tittleasfasjgpashgj9ahgpasgnapsighapighapsogna</h2>
...
</div>
</li>

<li>
<div class="block">
....
<h2>5Tittleasfasjgpashgj9ahgpasgnapsighapighapsogna</h2>
...

http://i.stack.imgur.com/lI82f.jpg

将.block 设置为200px,将img 设置为height: 90px; 和padding: 5px 现在我需要将img 下方的高度与h2 的高度进行比较。

但它也不起作用,它只是不做if,但divh包含数据(200,css中设置的200px)。

编辑:

所以我发现解决此问题的最佳方法是将高度设置为h2 标签,然后将其内容高度与设置的高度进行比较。

【问题讨论】:

  • 你的意思是$('h2') 在第 3,5 行吗?
  • 您在while 之后缺少(,但我不知道如果这就是您所拥有的全部代码,您的代码是否可以正常工作,因为$h2 未在此部分中定义.
  • 对不起,这是var h2=... 不是var p 并添加了(
  • 尝试在 if 之前添加 alert($(this).outerHeight()),以验证您期望的值。
  • 现在我明白了为什么它不起作用......它永远不会返回高于 200 的值。Pfff

标签: javascript jquery html while-loop each


【解决方案1】:

我认为你可能有几个问题,首先你在我认为你真正想做的“while”行上有一个错字

while ($('h2').outerHeight()>divh) {

但我真的认为你想使用 .each() jquery 方法,比如

$('h2').each(function(i) {
  if ($(this).outerHeight() > divh) {
    //...
  }
});

【讨论】:

  • 使用each 完全打破了逻辑本身:)。
  • 怎么样?他想要遍历 h2 标签,.each() 会这样做,不是吗?是的,我确实看到应该有一个外部循环来获取每个 .block 的高度。
  • @creechy 在这种情况下他需要使用each() 进行迭代,但while 应该保留在原位,因为它是解决方案的核心。
【解决方案2】:

这样的东西可以正常工作:

$('.block').each(function (i, el) {
    var $h2 = $(el).find('h2');
    var divh = $(el).height();
    while ($h2.outerHeight() > divh) {
        $h2.text(function (index, text) {
           return text.replace(/\W*\s(\S)*$/, '...');
        });
    }
});

jsFiddle Demo

你应该使用.block { word-wrap: break-word; }(或者在那些长长的h2文本中加入一些空格)让它们中断并帮助产生效果。

正如我在original question 中所说的,这只是一个想法,而不是准备在生产中使用的东西。它非常依赖 DOM,可能不是所有用例的最佳解决方案。

【讨论】:

  • 问题是.block 设置为 200px 高度,h2 最多返回 60,所以我必须减少 200 的图像高度,如果大于它,剩下的比替换,对吗?
  • 您能提出更好的解决方案吗?
  • @w0rldart 问题是我不太明白这个问题:)。你能用 jsFiddle 来说明它吗?这个想法取决于元素(原始中的p)周围的包装器(原始中的#fos)。包装器的唯一工作应该是包含元素并定义其高度。
  • @w0rldart 我真的没有机会看到您的代码以及您想要实现的确切目标,但我很高兴您已经解决了它。您应该回答您的问题,描述您的解决方案并接受它。
  • 会做@bazmegakapa...也谢谢你的帮助
【解决方案3】:

首先,您的正则表达式仅适用于空格分隔的单词。像你这样的长字符串不会被缩短。

其次,在 while 条件下,您不需要在 h2 var 上使用另一个选择器。

第三,.each 绝对是必需的。

var h2=$('.block h2');
h2.each(function(){
    var divh=$(this).closest('.block').height();
    while ($(this).outerHeight()>divh) {
        $(h2).text(function (index, text) {
            return text.replace(/\W*\s(\S)*$/, '...');
        });
    }
});

jsfiddle link

【讨论】:

  • 这将对所有元素使用第一个块的高度,这是错误的。
猜你喜欢
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2013-10-01
  • 1970-01-01
相关资源
最近更新 更多