不知道如何正确命名问题,如果标题误导,请为标题道歉。
我有一个arr.Length < 2
(大约30~)的列表,我正在从其他文件加载tables
,具体取决于ajax
用户点击的li data-id
。每个sidebar menu
都有自己的table
,id
中的每个input
都有td
基于id
和table id
的输入数量table
。
I.e:table#id_1
有一个input#id_1--input2
(input2
cus,它是此特定input
中的第三个table
。
我可以手动进行写作,但是我按字母顺序对列表进行排序,所以如果我想要添加一个新的table
,它将放在list
的中间,我将不得不重写为table's
和input's
id's
的一半,这是 big nay。
所以我试图获得一个可以id attribute
添加到table
的函数,并根据table id
设置input id
+在其中添加一个索引input
的结尾(例如上面的示例以及代码段末尾的effect i want
)。
var div = $('table');
div.each(function(index){
var inputid = index - 2;
$(this).attr('id', 'id_'+index);
$('input').each(function(inputIndex){
$(this).attr('id', 'id_'+inputid+'-input'+inputIndex);
});
});
div{
margin-bottom: 20px;
}
span{
background-color: black;
color: white;
padding: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>The effect i'm receiving:</span>
<div>
Table 1 //#id_0
<table>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input0
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input1
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input2
</td></tr>
</table>
</div>
<div>
Table 2 //#id_1
<table>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input3
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input4
</td></tr>
</table>
</div>
<div>
Table 3 //#id_2
<table>
<tr><td>
<label for="">item</label>
<input type="number"> ...
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> ...
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //input_0-input7
</td></tr>
</table>
</div>
<span>The effect I want:</span>
<div>
Table 1 //#id_0
<table>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input0
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input1
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_0-input2
</td></tr>
</table>
</div>
<div>
Table 2 //#id_1
<table>
<tr><td>
<label for="">item</label>
<input type="number"> //id_1-input0
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_1-input1
</td></tr>
</table>
</div>
<div>
Table 3 //#id_2
<table>
<tr><td>
<label for="">item</label>
<input type="number"> //id_2-input0
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_2-input1
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number"> //id_2-input2
</td></tr>
</table>
</div>
答案 0 :(得分:3)
将您的javascript代码更改为:
var div = $('table');
div.each(function(index){
var inputid = index;
$(this).attr('id', 'id_'+index);
$(this).find('input').each(function(inputIndex){
$(this).attr('id', 'id_'+inputid+'-input'+inputIndex);
});
});
注意最后一行是
$(this).find('input').each(...)
我们再次重申所有input
,而我们现在只迭代我们迭代的input
中的div
。
正如用户S McCrohan在评论中提到的:
var inputid = index - 2;
是不必要的,应该是:
var inputid = index;
答案 1 :(得分:1)
var div = $('div');
div.each(function(index){
$(this).attr('id', 'id_'+index);
$('input', this).each(function(inputIndex){
var id = 'id_'+index+'-input'+inputIndex;
$(this).attr('id', id).after('<span>' + id+ '</span>');
// above .after() to show the id, u can remove it
});
});
div{
margin-bottom: 20px;
}
span{
background-color: black;
color: white;
padding: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>The effect i'm receiving:</span>
<div>
Table 1 //#id_0
<table>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
</table>
</div>
<div>
Table 2 //#id_1
<table>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
</table>
</div>
<div>
Table 3 //#id_2
<table>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
<tr><td>
<label for="">item</label>
<input type="number">
</td></tr>
</table>
</div>