2014-10-04 46 views
1

我試圖在由for-loop生成的輸入列表中選擇一些特定輸入,其中一些div也由for-loop生成。這意味着選擇過程有點麻煩和困難,因爲ids是動態的。通過for-loop生成的特定輸入的複雜選擇

所以,這裏是什麼,我有一個樣品,由for-loop生成的每個ID:

<div id="block0"> 
    <input id="special0-0" class="block"></input> 
    <input id="special0-1" class="block"></input> 
    <input id="special0-2" class="block"></input> 
    <input id="special0-3" class="block"></input> 
</div> 
<div id="block1"> 
    <input id="special1-0" class="block"></input> 
    <input id="special1-1" class="block"></input> 
    <input id="special1-2" class="block"></input> 
    <input id="special1-3" class="block"></input> 
</div> 
<div id="item0"> 
    <input id="special0-0"></input> 
    <input id="special0-1"></input> 
    <input id="special0-2"></input> 
    <input id="special0-3"></input> 
</div> 
<div id="item1"> 
    <input id="special1-0"></input> 
    <input id="special1-1"></input> 
    <input id="special1-2"></input> 
    <input id="special1-3"></input> 
</div> 

我想id="special0-2id="special1-2"BUT NOT其中有那些選擇輸入class="block"

我已經嘗試了幾種可能性,其中包括這兩個應該工作對我說:

var item2 = $("div[id|='item'] > input[id$='-2']"); 

var item2 = $("input[id|='special'][id$='-2'][class!='block']"); 

的問題是,對於每一個選項,console.log(item2)回報0,我可以不適用我計劃在JavaScript的變化他們之後。感謝您的想法:)

JSFiddle

回答

0

這可能是它:

$('[id^="item"]').children('[id$="-2"]:not(.block)'); // full 
$('[id^="item"] > [id$="-2"]:not(.block)'); // short 

首先選擇與ID連同「項目」啓動,在這些的div找到那些與ID結尾'-2'。

我建議你給一個類的根項目。如果你總是想第三個,結合它會是:

$('.classname').children('div:nth-child(3)'); // full 
$('.classname > div:nth-child(3)'); // short 
+0

感謝您的回覆。我編輯了JSFiddle,並且你的4個選項都不起作用,我仍然在日誌中看到'0':http://jsfiddle.net/rdns1p2z/4 – Orphal 2014-10-04 18:56:51

+0

Nevermind。出於某種原因,它在JSFiddle中返回0,但您的解決方案#1在我的真實代碼中完美工作。謝謝! :) – Orphal 2014-10-04 19:00:30

+0

用$(document).ready包裝代碼。它會工作。當你執行代碼時,dom還沒有準備好。檢查這個小提琴:http://jsfiddle.net/rdns1p2z/5/ – Kalyan 2014-10-04 19:08:29