2010-07-30 7 views
0

J'ai les suivantes:PHP DOMDocument: Comment obtenir directement noeud childrens

http://pastie.org/1066861

J'ai une fonction Javascript, qui me dit de supprimer un noeud donné du parent, supposons position 1 (de 0 ou 1, puisque nous avons deux nœuds enfants sur parent), Lorsque je fais $ parent-> getElementsByTagName et que j'essaie de supprimer l'élément $ child-> (1), je remarque que PHP GetElementsByTagName me donne une position différente, pour ce nœud spécifique. Donc, il n'y a aucun moyen d'accéder au bon noeud, ce que JS a dit. Je suppose que je devrais rester loin de getElementsByTagName, et utiliser getElementsById, mais maintenant je voudrais apprendre et comprendre pourquoi cela ne fonctionne pas correctement.

Voici quelques code: http://pastie.org/1066857

Merci beaucoup pour votre atention; D

Répondre

1

trouvé une solution,

/* 
* 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

Sur DOMXpath, pourquoi est-ce $ valide nodechildren-> parentNode-> removeChild ($ nodechildren); et pas ce $ parent-> removeChild ($ nodechildren); Si j'accède au parent et lui dis d'enlever son enfant, pourquoi ai-je besoin d'accéder à l'enfant pour appeler le parent de cet enfant et lui dire de s'en retirer? – punkbit

+0

'$ divs' dans votre code est un' DOMNodeList' qui est une collection de noeuds. '$ node-> parentNode' est un' DOMElement' (habituellement) qui est un seul noeud. Donc, vous n'accédez pas au "parent" quand vous pensez l'être (avec le 'DOMNodeList'). – salathe

Questions connexes