【问题标题】:I want to clone with default values clonenode()我想用默认值克隆节点()
【发布时间】:2015-12-15 00:08:59
【问题描述】:

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

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...

【问题讨论】:

    标签: javascript php html clonenode


    【解决方案1】:

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

    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);
    }
    

    编辑2:

    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++;
      }
    });
    

    【讨论】:

    • 它是这样工作的:var _default; window.onload=function(){ var x=document.getElementById("insertar").tBodies[0]; _default =x.rows[1].cloneNode(true); }
    • 现在我想更改属性 td 以使其独一无二,你会怎么做?
    • @AbrahamMorales 假设 _default 是 td ? (最后我不确定你在克隆什么)。只需将您的 _default 克隆到一个变量中并更改 id。 _cloned_default.id = "stock1"
    • 如果我这样做,td id的宝座被改变了,你会怎么做?
    • @AbrahamMorales 很难理解你想要什么。 “td 的王座”没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2010-10-12
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多