2010-07-30 90 views
0

我有以下几点:PHP的DOMDocument:如何获得直接节点儿童的

http://pastie.org/1066861

我有一个JavaScript函数,它告诉我删除从父给定节点,让我们假设位置1(从0或1开始,因为父节点上有两个子节点),当执行$ parent-> getElementsByTagName并试图删除$ child-> item(1)时,我注意到PHP GetElementsByTagName给了我针对特定节点的不同位置。所以,JS没有办法访问正确的节点。

我想我应该远离getElementsByTagName,并使用getElementsById,但现在我想了解并理解为什么这不起作用。

下面是一些代码:http://pastie.org/1066857

非常感谢您的atention; d

回答

1

找到了解决办法,

/* 
* deleteNode() removes given node, in position X. 
*/ 
function deleteNode($html, $strParent, $intNodePosition) { 

    $domhtml = DOMDocument::loadHTML($html); 

    $xpath = new DOMXPath($domhtml); 

    $divs = $xpath->query("*/div[@id='maindiv']/div"); 

    $node = $divs->item($intNodePosition); 

    $node->parentNode->removeChild($node); 

    /* 
    this wont work, but why ? It should 
    $divs->removeChild($node); 
    */ 

return $domhtml->saveHTML(); 

}//fim deleteNode 
+0

在DOMXpath,为什么nodechildren-> parentNode-> removeChild之本有效$ ($ nodechildren);而不是这个$ parent-> removeChild($ nodechildren);如果我访问父母并告诉他将孩子移除,为什么我需要访问孩子呼叫这个孩子的父母并告诉他将其从孩子中删除? – punkbit 2010-07-30 10:43:49

+0

代码中的$ divs是一个DOMNodeList,它是一组节点。 '$ node-> parentNode'是一个DOMElement(通常),它是一个单独的节点。所以,当你认为自己(使用'DOMNodeList')时,你并没有访问“父”。 – salathe 2010-07-30 11:06:30