2011-01-06 91 views
0

這很奇怪我已類似這樣的標記jQuery選擇器,語法或錯誤?

<div id='div1'> 
    <ul id='ul1'> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    </ul> 
    <div id='div2'> 
    <ul id='ul2'> 
     <li>4</li> 
     <li>5</li> 
     <li>6</li> 
    </ul> 
    </div> 
</div> 

jQuery中我有這樣的選擇:

var el = $('#div2'); 
var liList = el.children('ul:first > li'); 

這應該返回第二組裏的,但它返回的第一套。 但是,如果我這樣做:

var el = $('#div2'); 
var liList = el.children('ul:first').children('li'); 

它返回首盤。任何想法發生了什麼?

這讓我拿一個雙重考慮,因爲第一組裏的是不是div2

我可以在我的代碼明顯改變後者甚至兒童,但它是一個bug或我只是不寫我的選擇正確?

UPDATE:
我正在運行的jQuery 1.4.1和使用的jsfiddle像有人建議用以下1.4.2(最接近的選項,以我的配置)和1.4.4表現出不同的結果。所以看起來好像是我寫了一個錯誤的選擇器,如Rocket所指出的那樣,jquery團隊修復了1.4.1中的錯誤。 :)

愛是愛的StackOverflow :)

+0

我看不出有什麼毛病代碼。如果你點擊[這裏](http://jsfiddle.net/2YEHj/),你可以看到你的代碼在運行,前面的例子匹配正確的li項目。 – 2011-01-06 17:04:14

+0

謝謝亞歷克斯,我也做了一個小提琴,但你擊敗了我的評論。 – Tesserex 2011-01-06 17:07:04

+0

@Alex,不完全。第一個例子返回'ul',而第二個例子返回'li'。 – 2011-01-06 17:07:28

回答

1

.children()返回'直接的孩子'。 ul2及其lidiv2的子女,但只有ul2是「直系孩子」。要獲得所有li,您需要使用第二個。

li是他們各自的「直接子女」ul

我希望這樣做。

var el = $('#div2'); 
var ul2 = el.children('ul:first > li'); // retuns ul2, because it's an immediate child 
             // the '> li' doesn't do anything 
var liList = ul2.children('li'); // this will return all of ul2's lis 

jsFiddle