【问题标题】:php removechild remove two childsphp removechild 删除两个孩子
【发布时间】:2019-07-11 17:19:56
【问题描述】:

如标题所说,我的 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-&gt;parentNode-&gt;removeChild($lst); 删除了两者

  • &lt;tag type="loop"&gt;
  • &lt;footer&gt;&lt;tag type="includes"&gt;&lt;/footer&gt;

这是我存在的最后一个孩子,它应该只删除&lt;tag type="loop"&gt;

当我 var_dump $lst->parentNode 时,我得到了正确的父节点来删除我的标签 (&lt;div class="row articles"&gt;)

【问题讨论】:

  • 我没有看到您在任何地方检查父节点或将元素选择限制为特定父节点,因此基于此 not 应该只删除每个名为tag 首先...?
  • 在我选择第一个的同时
  • 我注意到的第一件事是您的 while 循环不包含迭代器。如果不使用迭代器,为什么要使用循环?到目前为止,while 循环的工作方式与 if 语句完全相同。
  • 因为某些标签中可能包含其他标签,所以我必须继续检查更多,直到文档看不到任何标签为止
  • 是的,但是您应该使用一个无限堆叠的迭代器,直到它再也找不到任何其他元素,这就是循环的工作方式。截至目前,$lst 将始终返回:$dom-&gt;getElementsByTagName("tag")-&gt;item(0)。这里的数字0 应该包含一个迭代字段(例如$i$iteration),它将在循环中递增。

标签: php html dom


【解决方案1】:

我发现 html 格式错误,&lt;/div&gt; 没有放在正确的行,所以我的最后一个 &lt;tag type="includes"&gt; 被前一个删除了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2019-05-12
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多