jQuery根据另一个的高度动态地改变元素的高度

时间:2011-08-19 00:17:04

标签: jquery css dynamic-sizing

我知道这个问题已经得到解答,但我仍然需要帮助解决我的具体情况

我有

<ul>
<li>blah blah</li>
<li>blah blah blah</li>
</ul>

我已经成功使用

在每个li之后插入一个div
$('<div class="shadow-hide"></div>') .appendTo('div#main nav.left ul li');

所以html现在是

<ul>
  <li>blah blah</li>
  <div class='shadow-hide'></div>
  <li>blah blah blah</li>
  <div class='shadow-hide'></div>
</ul>

但是如何设置div的高度以匹配之前的li的高度?

这是我到目前为止的尝试,但我想它只是得到了第一个li的高度:

$('<div class="shadow-hide"></div>') .appendTo('div#main nav.left ul li');
    var liHeight = $("div#main nav.left ul li").height();
    $('div.shadow-hide').css('height', liHeight);

3 个答案:

答案 0 :(得分:2)

也许:

$('.shadow-hide').height(function() {
   return $(this).prev('li').height();
});

或者更符合您的实际使用案例:

$('#main nav.left ul li').each(function(i, el) {
  var $el = $(el), height = $el.height();
  $('<div class="shadow-hide" />').height(height).appendTo($el);
});

编辑:如评论中所述,你不能直接在一个列表中嵌入一个div,所以你可能想重新考虑一下你是否正在设计这个样式,或许用列表项替换“shadow-hide”div。 / p>

答案 1 :(得分:1)

$('<div class="shadow-hide"></div>') .appendTo('div#main nav.left ul li');这一行将在每个li中附加div。但是你所显示的标记是错误的,div应该进入每个li里面。

现在,您可以尝试以下脚本来设置每个li中阴影隐藏div的高度。

$("div#main nav.left ul li").each(function(){
   $(this).find(".shadow-hide").height($(this).height());
}):;

答案 2 :(得分:1)

使用.append(function(index, html)可以简洁有效地完成这两项工作,我认为在这种情况下更有意义:

var div = '<div class="shadow-hide">Test</div>';

$("ul li").append(function(index, html) {
    return html + ($(div).height($(this).height()).html());
});

Demo.