2012-05-27 37 views
1

从理论上说,如果我有无序的项目简单的jQuery算术

<ul> 
    <li><a>Link1</a></li> 
    <li><a>Link1</a></li> 
</ul> 

列表我怎么能这样做与jQuery以下?

1)找到每个单独a元件

2)求出每个单独li元件

3的宽度)从它的宽度减去每个子a元件的宽度的宽度的父li元件

4)然后,将总添加到每个父li元件

这不起作用:

$('ul > li').each(function() { 
    var liWidth = (this).width(); 
    var aWidth = ('ul > li > a').width(); 
    var subractedWidth = parseFloat(liWidth) - parseFloat(aWidth); 
    var newWidth = subtractedWidth + parseFloat(liWidth); 
    $(this).css('width',newWidth); 
}); 

在此先感谢!

+0

其'$(本)''不是(这个)'。 –

+0

and $('ul> li> a)note('ul> li> a) – Zevan

回答

2

你忘了使用中的几个景点的$,和你想获得<a>宽度是特定<li>你是在内部,所以你不应该再次查询整个DOM。这将做到这一点:

$('ul > li').each(function() { 
    var liWidth = parseFloat($(this).width()); 
    var aWidth = parseFloat($(this).find('a').eq(0).width()); 
    $(this).width((liWidth - aWidth) + liWidth); 
}); 
+0

太棒了,这有效。谢谢! – dcd0181

+0

考虑标记答案,如果它帮助你接受:) –

+0

再次感谢您的帮助,语法 – dcd0181

0

看起来像你忘了一些$。

$('ul > li').each(function() { 
    var liWidth = $(this).width(); 
    var aWidth = $(this).find('a').width(); 
    var subractedWidth = parseFloat(liWidth) - parseFloat(aWidth); 
    var newWidth = subtractedWidth + parseFloat(liWidth); 
    $(this).css('width',newWidth); 
}); 
1

你可以做

$('ul > li > a').each(function() { 
    var li = $(this).closest('li'), 
     liWidth = li.width(), 
     aWidth = $(this).width(); 

    li.width(liWidth + (liWidth - aWidth)); 
});