2012-06-27 22 views
1

我有一些jquery,它將計算我的菜單中的項目並將li分配給計算出的px寬度。使用jquery計算頁面中的第一級UL LI的數量

這裏是代碼:

$(document).ready(function(){ 
    $('div#new-menu-lower ul li').css('width', ($('div#new-menu-lower ul').width()/$('div#new-menu-lower ul li').length)); 
    $(function() { 
     var menuWidth = $('div#new-menu-lower ul').width(); 
     var listItems = $('div#new-menu-lower ul li').length; 
     var itemWidth = Math.floor(menuWidth * (1/listItems)) - 40; 
     $('div#new-menu-lower ul li').css('width', itemWidth); 
    }); 
}); 

問題是listItems顯示爲38項,它似乎計算每一個裏這是不對的。它應該只計算第一個ul的不是子元素。

我能做些什麼來阻止這種情況的發生?

+0

使用直接子選擇器:「DIV#新菜單下> UL禮」 – Th0rndike

+0

@ Th0rndike他需要一個'UL> li'孩子選擇太多,否則它會仍然返回_all_'li'元素。 – Alnitak

回答

4

變化

var listItems = $('div#new-menu-lower ul li').length; 

var listItems = $('div#new-menu-lower > ul > li').length; 

你需要jQery parent > child選擇來實現你的工作。

從jQuery的文檔:

選擇由元素的「小孩」 由「父」規定中規定的所有直接子元素。

作爲一個CSS選擇器,子組合子是由所有現代Web瀏覽器 包括Safari,Firefox,歌劇,Chrome和互聯網 Explorer 7以上版本支持,但值得注意的是不是版本的Internet Explorer 6 及以下。然而,在jQuery中,這個選擇器(以及所有其他的) 適用於所有支持的瀏覽器,包括IE6。

孩子組合子(E> F)可以被認爲是後代組合子(E F)的更具體形式 ,因爲它只選擇第一級 後代。

+0

@ Super1不用客氣 – thecodeparadox