复制或克隆后更改元素名称

时间:2014-01-27 19:03:13

标签: jquery dom

我是JQuery的新手,需要一些帮助。让我解释一下我想做什么。

这是我的表

<table id="table">
    <tr>
        <td>
            <input type="button" id="btnAdd" name="btnAdd" value="Add">
        </td>
    </tr>    
    <tr id="r1" style="display:none">
        <td>
            <a href="#" onClick="$(this).removeRow();">Delete</a>
        </td>

        <td>
            <select id="ddlCol_1_1" name="ddlCol_1_1">
                <option value="">Select Option</option>
                <option value="a">a</option>
                <option value="b">b</option>
                <option value="c">c</option>
            </select>
        </td>
        <td>
            <select id="ddlOp_1_1" name="ddlOp_1_1">
                <option value="=">=</option>
                <option value=">">></option>
                <option value="<"><</option>
                <option value="">*</option>
            </select>
        </td>
        <td>
            <input type="text" id="cond_1_1" name="cond_1_1" />
        </td>
        <td>
            <select id="ddlConjunction_1_1" name="ddlConjunction_1_1" onChange="checkORCondition(this);">
                <option value="And">And</option>
                <option value="Or">Or</option>
            </select>
        </td>           
    </tr>
</table>

当SELECT drowndown name&#34; ddlConjunction_xxx&#34;在OnChange中,它将调用Javascript函数来复制内部的几列(TD)和元素。到目前为止,这个功能的工作非常精细。这是执行此操作的功能。

function checkORCondition(e)
{
    // --- Find the Current Row 
    var currRow = $(e).closest('tr');
    var currRowNum = currRow.index();

    var $row = ($(this).closest("tr").length + currRowNum);
    $('#table').find("tr:eq(" + $row + ")").each(function() {
        var $tds = $(this).children()
            //$row = $("<tr></tr>");
        $(this).closest("tr").append($tds.eq(1).clone()).append($tds.eq(2).clone()).append($tds.eq(3).clone()).append($tds.eq(4).clone()).appendTo($(this)).closest("tr")
    });

}

基本上,我正在处理当前行中的1-4列,因此它变为8列,12列......等等..

我想更改第一组复制列5-8名称的ID /名称,例如来自&#34; ddlCol_1_1&#34;,&#34; ddlOp_1_1&#34;,&#34; cond_1_1&#34;和&#34; ddlConjunction_1_1&#34; ...到...&#34; ddlCol_1_2&#34;,&#34; ddlOp_1_2&#34;,&#34; cond_1_2&#34;和&#34; ddlConjunction_1_2&#34;,然后下一组复制的列9-12是&#34; ddlCol_1_3&#34; ....等等。

希望我澄清一点。请帮忙!

谢谢,

2 个答案:

答案 0 :(得分:1)

你的意思是:

var myTbl = $('#table'), count = 1;
myTbl.eq(0).on('change', 'td select.xor', function(){
count += 1;
var tds = [];
var lastTr = $(this).closest("tr");
lastTr.find("td:gt(0):lt(5)").each(function() {
    var idArr = ($(this).find('select, input').attr('id')).split('_'); 
    var newId = idArr[0] + '_' + (count)+ '_' + (count);

    tds.push($(this).clone()
                    .find('select, input')
                    .attr('id', newId)
                    .prop('name',  newId)
                    .end());
     });
  lastTr.append(tds);
 });

<强> DEMO 你可以根据需要调整它。

答案 1 :(得分:0)

将其缓存为变量。

var $new = $("#ddlCol_1_1").clone();
$new.attr("id", "#ddlCol_1_2");