2012-05-27 38 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)); 
});