我有一個超過9行的表。鏈接jQuery選擇器:lt和:gt
如果我這樣做:$('table tr:gt(3):lt(6)')
,我最終應該收到3或6個元素,爲什麼?所有選擇器是否應用於相同的主要選擇,或者它們是否被連續應用於不同的選擇?
我有一個超過9行的表。鏈接jQuery選擇器:lt和:gt
如果我這樣做:$('table tr:gt(3):lt(6)')
,我最終應該收到3或6個元素,爲什麼?所有選擇器是否應用於相同的主要選擇,或者它們是否被連續應用於不同的選擇?
它們是按順序應用的,所以首先您將過濾掉前四個元素(:gt(3)
),然後過濾掉已經過濾的集合中第六個(:lt(6)
)元素之後的所有元素。
想象一下這樣的HTML:
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
<br/><br/>
然後執行以下的jQuery:
$('br:gt(3):lt(6)').addClass('sel');
,您將擁有:
<br/><br/>
<br/><br/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br class="sel"/><br class="sel"/>
<br/><br/>
出於某種原因:lt(6)
將在選擇被忽略,因此它會在這個縮影中返回大於3的所有內容。
然而,如果切換過來,它會按預期
$('table tr:lt(6):gt(3)')
將返回2排工作(只有行4和5是6之間和3)。
**編輯:**使用v.1.3.2
而且也lt(6)
不會被忽略,不只是工作,我期望它。所以:gt(3):lt(6)
實際上會返回6個元素(如果你有足夠的行,那就是)
我建議你改用slice()方法。
http://docs.jquery.com/Traversing/slice#startend
$('table tr').slice(2, 5).addClass("something");
不太你可能會覺得 -
基本上,應用第二過濾器順序,以匹配集的第一個過濾器。
例如,在一個有10行的表上,:gt(3)
將過濾到元素5-10,然後:lt(6)
將應用於這6個元素,而不是過濾任何。
如果您將/編輯添加到演示網址,則可以使用選擇器進行播放並親自查看。如果將第二個過濾器更改爲:lt(2)
,則會獲得以紅色突出顯示的第5行和第6行
請注意,「:lt(n)」和「:lt(n)」選擇器是0索引且不包含在內。 – Blixt 2009-07-16 12:39:17
正式指出,謝謝。 – glmxndr 2009-07-16 12:46:31
謝謝先生,非常有幫助! – GianFS 2013-01-08 04:13:43