jQuery将克隆后代的id递增1

时间:2015-07-30 20:41:25

标签: jquery clone identity

我有以下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>

1 个答案:

答案 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这样的语言。