2010-10-12 27 views
1

在jQuery空間表示AND條件「,」表示OR條件,是嗎?但我在這方面遇到了問題。這是我的HTML代碼示例和/或條件在jQuery

<td id="4"> 
    <div id="test1" class="test1"></div> 
    <div id="test2" class="test2"></div> 
</td> 
<td id="5"> 
    <div id="test1" class="test1"></div> 
    <div id="test2" class="test2"></div> 
</td> 

如果我使用下面的查詢,它的工作原理

jQuery('#4 [id*=test1]') 

它選擇正確的股利。但是,如果我使用此查詢,

jQuery('#4 #test1') 

它不起作用。任何想法?

+0

在這裏檢查http://jsfiddle.net/92NaR/ – Rajasankar 2010-10-12 15:50:44

回答

7

在同一文檔中有重複的id是無效的。

如果您正在構建這個動態再嘗試父ID前面加上孩子所以這將是這樣的:

<td id="r4"> 
    <div id="r4_test1" class="test1"></div> 
    <div id="r4_test2" class="test2"></div> 
</td> 
<td id="r5"> 
    <div id="r5_test1" class="test1"></div> 
    <div id="r5_test2" class="test2"></div> 
</td> 

注意,以數字開頭的ID也無效,所以我冒昧地在您的行ID前加「r」。

我會建議使用的選擇:

$('#r5 .test1') 
2

空間不是嚴格意義上的「和」的條件。 在你自己的例子,jQuery('#4 #test1')空間手段得到的#4個孩子叫#test1的,如果你明白我的意思

jquery docs這說明它比我好!

jQuery('ancestor descendant') 選擇作爲給定祖先後代的所有元素。

+0

#test1是一個孩子,如果在這個例子中#4。 – tster 2010-10-12 15:17:37

2

以「AND」和「OR」的方式思考選擇器可能不是解決問題的最有用的方法。如果一個空間裏,真正的意思是「AND」,那麼這兩個語句是相同的:

$('.parent_class .child_class') 

$('.child_class .parent_class') 

如果選擇是一個簡單的「AND」,那麼這些語句會選擇符合兩個條件的所有項目。

實際上,這些說法有很大不同。 jQuery和CSS選擇器中的空間實際上顯示了繼承。當你有兩個單獨的類時,就像在我的例子中一樣,你總是說:「只有當列表中的第一個類的元素包含它時,才選擇列表中第二個類。」

你可以說逗號的意思是「OR」,但實際上它只是將兩個選擇語句彼此分開,這樣就可以選擇兩個完全獨立的項目或一組項目。

jQuery選擇器語法從CSS借用,所以this group of tutorials on w3schools.com可能是一個有用的開始。

0

我認爲你應該把ID標籤放在div標籤上,並且只和類一起工作。

use $('#d5 .test1') or 
$('#d5').find('.test1') 

我通常使用後者,因爲它只是更容易閱讀,當我回去一個月後看代碼。

<td id="d4"> 
    <div class="test1">w</div> 
    <div class="test2">x</div> 
</td> 
<td id="d5"> 
    <div class="test1">y</div> 
    <div class="test2">z</div> 
</td>