2014-10-04 43 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