jQuery用新的id克隆一个表,如何集体写下面的代码

时间:2010-09-20 14:03:58

标签: jquery

我遇到一些jQuery的问题,请帮帮我。以下是我的表单结构:

<form name="imageUploadForm" id="imageUploadForm" action="" method="POST" enctype="multipart/form-data" >
   <table border="0" width="80%" cellpadding="2" cellspacing="3" id="mainTable">
   <tbody>
    <tr>
            <td> 
                  <table border="0" id="imageTable" class="imageTable">
                    <tr>
                      <td><label for="image_title"><sup>*</sup>Image Title:</label></td>
                      <td><input type="text" name="image_title[]" id="image_title[]"></td>
                    </tr>
                    <tr>
                      <td><sup>*</sup>Image:</td>
                      <td><input type="file" name="main_image[]" id="main_image[]" ></td>
                    </tr>
                  </table>
            </td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <td colspan="2"><input type="button" id="addRow" value="Add More" /></td>
        </tr>
    </tfoot>
    </table>    
</form> 

我想要的是:当我点击Add More按钮时,一个新表(即imagetable的克隆)附加到mainTable,这是我的jQuery代码:

jQuery(document).ready(function() {
    var count=1;
    jQuery('#addRow').click( function () {
        var Clonedtable = jQuery("#imageTable").clone(true);
        Clonedtable.appendTo('table#mainTable');
    })
});
  • 我需要为表创建不同的ID,以及两个输入
  • 制作ID数组是否有效?
  • 我想追加克隆表附加tbody的最后一个表,而不仅仅是在主ImageTable之后
  • 两个输入都应为空。

请建议我优化的方法。感谢。


更新:我已经更改了表格结构(之前我错了),我想根据下一个输入ID更改标签的for属性值并删除<sup>*</sup>标签。我写下面的代码,一切正常,但我需要集体写,我不明白如何写它集体,请建议我

 jQuery('#addRow').live('click', function () {
        var quantity = jQuery('table[class^=imageTable]').length;
        var clonedRow = jQuery('#mainTable > tbody > tr:first').clone(true);
        var textID = clonedRow.find(':text').attr('id');
        clonedRow.find('label').attr('for', function () {
            return textID + quantity;
        });
        clonedRow.find('th').text('Image '+(++quantity) + ' :');
        clonedRow.find('sup').remove();     
        clonedRow.attr('id', function () {
            return this.id + quantity;
        }).find(':text,:file').attr('id', function () {
            return this.id + quantity;
        }).val('').end().appendTo('#mainTable');
    });

3 个答案:

答案 0 :(得分:7)

编辑:访问克隆元素的属性存在一些问题。我更改了答案,改为使用原生getAttributesetAttribute

jQuery('#addRow').click(function() {
    // Get current count of imageTables and use that value for IDs
    var quantity = jQuery("table[id^=imageTable]").length;

    // clone the table
    var clone = jQuery("#imageTable").clone(true);

    // use native DOM methods to update the ID
    clone[0].setAttribute('id', clone[0].getAttribute('id') + quantity);

    // find any text or file inputs, and iterate over them
    clone.find(':text,:file').each(function() {
          // use native DOM methods to update the ID
        this.setAttribute('id', this.getAttribute('id') + quantity);
          // set the value to ""
        this.value = "";
    });
     // append to the <td>
    clone.appendTo('#mainTable > tbody:last > td');
});​

原始回答:

试试这个:

<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery('#addRow').click( function () {
                   // Get current count of imageTables and use that value for IDs
            var quantity = jQuery("table[id^=imageTable]").length;
                   // Clone the main table
            jQuery("#imageTable").clone(true)
                   // Change its ID to the current ID plus the quantity variable
                 .attr( 'id', function() { return this.id + quantity; })
                   // find any text or file inputs
                 .find( ':text,:file' )
                   // change their IDs
                 .attr( 'id', function() { return this.id + quantity; })
                   // set the input values to ""
                 .val( "" )
                   // return to the cloned table
                 .end()
                   // append wherever you want it.
                   // As the comment below your question states,
                   //   this is not a valid placement
                 .appendTo('#mainTable > tbody:last');
        })
    });
</script>

编辑:修复了.find()中逗号超出引号的拼写错误。

答案 1 :(得分:0)

如果您想保持简单的更改

          var table= $(".imageTable").html();
          table.appendTo("#mainTable");

答案 2 :(得分:0)

当您确实想要将克隆元素附加到table#mainTable时,您尝试将克隆元素附加到错误的元素,并将其定位到tbody

更改此行

Clonedtable.appendTo('table#mainTable');

到此

Clonedtable.appendTo('table#mainTable tbody');

但你真的不想这样做。你真的不应该在tbody中直接使用任何表格,而是td元素。