2016-02-16 36 views
0

我試圖克隆和更改表中所有行的id,然後回答https://stackoverflow.com/a/2977114/327247 但下面的代碼不會更改第一個id:行id 。 的JavaScript是Jquery .find沒有查看父元素

var $clone = $("#RowPly-R1-P1"); 
$clone.find('[id]').each(function() { 
    var $th = $(this); 
    var newID = $th.attr('id').replace(/-P\d+$/, 
            function(str) { return "-P"+i; }); 
    console.log(newID); 
    $th.attr('id', newID); 
}); 
console.log($clone); 
$clone.appendTo($tableToModfiy); 
$clone.after($("RowPly-R1-P1")); 

而HTML是

<tbody id="tblPlayers"> 
<tr id="RowPly-R1-P1"> 
<td>1</td> 
<td> 
    <div class="input-group"> 
    ............ 
    </div> 
    </td> 
    </tr>         
</tbody> 

所有的ID內部行是成功changed.I不明白爲什麼找到並沒有改變的第一個ID。

回答

1

由於.find()將查找克隆元素的所有後代元素,而不是克隆元素本身,因此不會更新克隆元素的ID。

$clone.find('[id]').addBack() 

您也可以嘗試attr('id', callback)格式像

var $clone = $("#RowPly-R1-P1"); 
$clone.find('[id]').addBack().attr('id', function(i, id) { 
    return id.replace(/-P\d+$/, 
    function(str) { 
     return "-P" + i; 
    }); 
}); 
+0

'.addBack()'當應用到問題的代碼工作給我。關於第二個建議,我不明白'i'傳遞給回調函數,你能解釋一下嗎? – DdD