我想克隆默认值clonenode()

时间:2015-12-14 15:25:49

标签: javascript php html clonenode

我想要做的是克隆表中的一行。代码如下:

function addRow(){ 
    var x=document.getElementById("insertar").tBodies[0];  //get the table
    var node=x.rows[1].cloneNode(true);    //clone the previous node or row
    x.appendChild(node);   //add the node or row to the table
}

我只是不想克隆这个部分,因为当我将数据添加到第一行时,克隆时,数据也会被克隆。 我写了HTML代码:

<table id='insertar'>
                <tr><td>Producto</td><td>Stock</td><td>Cantidad</td></tr>
                <?php 
                $numeroItems = 1;
                try{
                    $prod = array();
                    $param = array('TIPOP'=> 'Productos');
                    $ready = $client->MOSTRARPRODUCTOS($param)->MOSTRARPRODUCTOSRESULT;
                    array_push($prod,$ready->PRODUCTOS);
                }catch(Exception $e){
                    echo $e->getMessage();
                }
                echo "
                <tr><td>
                <select id='p' name='producto[]' onChange='document.getElementById(\"stock\").value = setStock()' >";
                echo "<option value='' >---------</option>";
                if(count($ready->PRODUCTOS)>1){
                    for($j = 0;$j < (count($ready->PRODUCTOS)); $j++){
                        if($ready->PRODUCTOS[$j]->GRUPO==$_GET['grupo']){
                            echo "<option value=".trim($ready->PRODUCTOS[$j]->CODIGOP)." >".trim($ready->PRODUCTOS[$j]->CODIGOP)."</option>";
                        }
                    }
                }
                echo "
                </select><br />
                </td>
                <td><input type='text' id='stock' value='' name='stock[]' readonly></input></td>
                <td><input type='text' name='cantidad[]' required></input></td></tr>";
                ?>
            </table>
            <a href="#" onclick="addRow()" >Agregar otro</a>

现在我想更改属性td以便它们是唯一的,你会怎样? 克隆的例子:

<tr><td>.....</td><td id="stock1" ...></td></tr>
<tr><td>.....</td><td id="stock2" ...></td></tr>
<tr><td>.....</td><td id="stock3" ...></td></tr>
Etc...

1 个答案:

答案 0 :(得分:0)

您应该在修改之前克隆默认节点。然后根据需要在default中重新审核addRow

var _default;
window.onload = function(){
  _default = document.getElementById('defaultNode').cloneNode(true);
}
像这样:

function addRow(){ 
    var x=document.getElementById("insertar").tBodies[0];  //get the table
    x.appendChild(_default);   //add the node or row to the table
}

您提出的工作解决方案:

var _default;
window.onload = function() {
  var x = document.getElementById("insertar").tBodies[0];
  _default = x.rows[1].cloneNode(true);
}

EDIT2:

var counter = 1;
function addRow(){ 
    var _cloned_default = _default.cloneNode(true);
    _cloned_default.id = "stock" + counter;
    counter++;
    x.appendChild(_cloned_default);   //add the node or row to the table
}

只需在克隆元素中获取td元素:

Array.prototype.slice.call(_cloned_node.childNodes, 0).forEach(function(value){
    //making sure it's a node and nothing else
    if(value.nodeType === 1){
        //change id here
        value.id = counter;
        counter++;
  }
});