我有以下jQuery函数:
$(document).ready(function(){
$("#nmovimentos").change(function () {
var direction = this.defaultValue < this.value
this.defaultValue = this.value;
if (direction) {
var $div = $('div[id^="novomov"]:last');
var num = parseInt( $div.prop("id").match(/\d+/g), 10 ) +1;
var $clone = $div.clone().prop('id', 'novomov'+ num)
$clone.insertAfter('[id^="novomov"]:last');
$('[id^="darktheme"]:last').text('+ '+num+'º Novo Movimento');
// get all the inputs inside the clone
$clone.find('*').each(function() {
var name = $(this).prop('name');
var id = $(this).prop('id');
$(this).prop('name', name+num);
$(this).prop('id', id+num);
});
}
else {
$('[id^="novomov"]:last').remove();
}
});
});
基本上,它用id="novomov1"
克隆div元素,并在每次结束时增加数字。因此,对于第一个克隆,id为id=novomov2
。对于克隆的后代的所有名称和ID,它被假设做同样的事情,但它只与名称一起使用。对于后代的ID,最后的数字没有被添加,它们被放在数字的末尾。例如,id="mov1"
变为id="mov12"
,id="mov123"
等等......如果名称和ID的代码相同,为什么会出现这种情况?
<div id="novomov1">
<table>
<tr>
<td id="darktheme1"> +New Moviment</td>
</tr>
</table>
<table id="tabela1">
<tr>
<td id="mov1">
Type:<br>
<input name="tipomov1" id="l1" type="radio" value="1" >Line</input>
<input name="tipomov1" id="c1" type="radio" value="2" >Circle</input>
<input name="tipomov1" id="r1" type="radio" value="3" >Rotate</input>
<input name="tipomov1" id="m1" type="radio" value="4" >Move</input>
</td>
</tr>
</table>
</div>
答案 0 :(得分:1)
在这一行:
$(this).prop('id', id+num)
你的id是一个字符串,所以不是以数字方式添加值,而是将值合并为一个字符串。这就是为什么mov1变成mov12的原因。要解决此问题,您需要模仿上面所做的事情:
var num = parseInt( $div.prop("id").match(/\d+/g), 10 ) +1;
parseInt将其转换为整数,因此它是数字加法而不是字符串连接。这是&#34;松散类型&#34;的基本问题。像javascript这样的语言。