jquery,克隆问题和保持独特的ID!

时间:2010-12-29 19:29:21

标签: jquery

我决定使用jquery来创建下拉菜单的副本,而不是使用我的perl脚本。我遇到了一个问题。

我有一系列可以多次克隆的投放箱。结构是这样的:

<div id="org_dropmenus_asdf">
    <table border="0">
    <tr>
    <td valign="top">
        <select name="wimpy_asdf_1" id="wimpy_asdf_1" size="4">
          <option value='1'>1</option>
          <option value='2'>2</option>
        </select>;
    </td>
    <td valign="top">
        <select name="monkey_asdf_1" id="monkey_asdf_1" size="4">
          <option value='c'>c</option>
          <option value='d'>d</option>
        </select>;    
    </td>
            </tr>
            </table><p>
    </div>|;

我克隆var $ cloneDiv = $('#org_dropmenus_asdf')。clone();

如何搜索和替换asdf_1(“1”)并使用新值递增?

3 个答案:

答案 0 :(得分:1)

你需要做一些事情:

var counter = 1;
$cloneDiv = $('#org_dropmenus_asdf').clone().find('[id]').attr('id', function(idx, oldId){
    return oldId.substr(0, -1) + counter;
}).attr('name', function (idx, oldName) {
    return oldName.substr(0, -1) + counter;
});

您可以反复执行此操作,每次递增counter。请注意,此代码最多只能使用9,因为它会删除最后一个字符;需要在10以上删除更多字符。

另请注意,这不会更改org_dropmenus_asdf id属性,该属性也需要针对有效DOM进行更改。

答案 1 :(得分:1)

function incrementId(idString) {

    // split it at the underscore
    var pieces = idString.split("_");

    // if there is a fourth element, then it just needs incrementing
    if (pieces[3]) {
        pieces[3] = parseInt(pieces[3]) + 1;

    // if not, then it needs to be added
    } else {
        pieces[3] = "1";
    }

    // reconstruct the ID by joining with the underscore character
    return pieces.join("_");
}

$cloneDiv = $('#org_dropmenus_asdf').clone();

// get the ID of the last 'org_dropmenus_asdf' div and increment
var lastDivId = incrementId($("div[id^=org_dropmenus_asdf]:last").attr("id"));

// get the IDs of the contained select elements, and increment
var selectIds = $("div[id^=org_dropmenus_asdf]:last select").map(function() {
    return incrementId(this.id);
}).get();

alert(lastDivId);
alert(selectIds);

部分演示+概念验证:http://jsfiddle.net/karim79/fL9ve/2/

答案 2 :(得分:1)

这是解决此问题的另一种方法。 我将id和name用作数组,这样就可以更轻松地发布到PHP并进行处理而不需要太多努力。 这会占用两个字段名称,我可以在发布时链接它们。它是一个选择和一个文本字段。 这是在我添加了一个克隆后发生的。

var newid = Number($('.table_id').last().find(':text').attr('id').substr(-2,1)) + 1;

$('.table_id').last().find(':text').attr('id','detailValue['+newid+']').attr('name','detailValue['+newid+']');
$('.table_id').last().find(':select').attr('id','detailValue['+newid+']').attr('name','detailValue['+newid+']');