PHP - 多次附加DOMNode

时间:2015-01-08 23:40:18

标签: php append domdocument appendchild dom-node

请让我先说明以下情况。 我有这个标记,作为我的模板:

<div class="container">
    <div class="item"></div>
</div>

现在我要做的就是抓住'.item'节点,复制它,为它添加一些值并将其附加到'.container'(它的父节点)。并重复这个过程几次。这就是结果的样子:

<div class="container">
    <div class="item">Happy</div>
    <div class="item">New</div>
    <div class="item">Year</div>
    <div class="item">2015</div>
</div>

我用以下代码完成了这个:

$child = $node->childNodes->item(0);    
$refNode = $child;
$template = $child->cloneNode(true);

for($i=0; $i < 4; $i++){ 
    $refNode = ($node->lastChild === $child)?
                $node->appendChild($child): 
                $node->insertBefore($child, $refNode->nextSibling); # (newNode, refNode)

    $refNode->nodeValue = walk($data);
    $child = $template->cloneNode(true);
}

function walk(&$array){
    $item = current($array); next($array); return $item;
}

这很好用。但是,我对这段代码不满意。

我期待这可以通过更简单的方式完成,如下所示:

$refNode = $node->childNodes->item(0)->cloneNode(false); # copy the child node
$node->nodeValue = null; # empty the container

for($i=0; $i < 4; $i++){ 
    $refNode->nodeValue = walk($data); # assign value to the reference node
    $node->appendChild( $refNode ); # append 
}

遗憾的是,这不起作用。

所以,我的问题是,是否有更简单,更优雅的方式来做到这一点?



修改

好的,这将有效:

$child = $node->childNodes->item(0); # copy the child before removing
$refNode = $child; # make a reference
$node->nodeValue = null; # empty parent

for($i=0; $i < 4; $i++){  
    $refNode->nodeValue = walk($data); # assign value to reference node
    $child = $refNode->cloneNode(true); # copy reference node
    $node->appendChild($child); # append to parent
}

虽然我还不太清楚为什么我不能重新追加子节点。也许是因为它已被附加,因此无法再添加,这就是为什么我必须创建一个参考节点?

0 个答案:

没有答案
相关问题