首页 > 解决方案 > php removechild 删除两个孩子

问题描述

就像标题说的那样,我的 php removeChild 函数有问题

我有这个脚本在 html 标签上循环

$list = $dom->getElementsByTagName("tag");

//charge et supprimme les tags
while($lst = $list->item(0)) {

    $tgs = ucfirst($lst->getAttribute("type"));
    array_push($test, $tgs);
    $tg = new $tgs($dom, $lst, false);

    $tg->render();
    var_dump("--------- 1 ---------");
    for ($i=0; $i < $list->count(); $i++) {
        var_dump($list->item($i)->getAttribute("type"));
    }

    // var_dump($list[0]->parentNode->nodeName);

    $lst->parentNode->removeChild($lst); //this line

    var_dump("--------- 2 ---------");
    for ($i=0; $i < $list->count(); $i++) {
        var_dump($list->item($i)->getAttribute("type"));
    }
    $list = $dom->getElementsByTagName("tag");
}

和这个 html 文件

<!DOCTYPE html>
<html lang="fr">

<head>
</head>

<body>
    <header>
        <tag type="includes" file="header" />
    </header>
    <main class="test container">
        <div class="bloc_principal">
            <div class="cover-black">
                <div class="bloc_principal_titre">
                    <h1>L'actualité de nos campus...</h1>
                </div>
                <div class="test2">
                    <h2 id="titre-home">Ceci est un magnifique titre</h2>
                    <p class="p-home">
                        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
                        do eiusmod tempor incididunt ut labore et dolore magna aliqua.
                        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
                        nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit
                        in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
                        cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
                    </p>
                    <div class="bloc-plus">
                        En savoir plus
                    </div>
                </div>
            </div>
        </div>
        </div>
        <h3 id="titre-between">Articles récents</h3>
        <div class="row articles">
            <tag type="loop" for="posts" limit="6">
                <div class="col-12 col-md-6 col-lg-4">
                    <div class="article column-categorie">
                        <h4 class="title">
                            <loop column="title" />
                        </h4>
                        <div class="etiquettes">
                            <span class="cat">
                                <loop column="categorie" />
                            </span>
                            <span class="date">
                                <loop column="date" />
                            </span>
                        </div>
                        <div class="text">
                            <loop column="content" />
                        </p>
                    </div>
                </div>
            </tag>
        </div>
    </main>
    <footer>
        <tag type="includes" file="footer" />
    </footer>
</body>

</html>

其中大部分工作正常。

但由于某种原因,该功能$lst->parentNode->removeChild($lst);同时删除

那是我最后一个孩子存在的时候,它应该只删除<tag type="loop">

当我 var_dump $lst->parentNode 我得到正确的父级来删除我的标签(<div class="row articles">

标签: phphtmldom

解决方案


Well I found that the html was badly formatted and a </div> wasn't placed at the correct line, so my last <tag type="includes"> was deleted by the precedent one


推荐阅读