2010-07-30 46 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