使用DOM将文本节点添加到HTML元素的开头或结尾?

17

这是我的HTML代码

<html> 
    <body>
        <div>A sample block <div>and child block</div></div>    
    </body>
</html>

我该如何使用DOM将文本节点附加和插入到BODY元素中,而不影响其兄弟元素?

$dom = new DOMdocument();    
@$dom->loadHTML($html);    
$xpath = new DOMXPath($dom);    
$body = $xpath->query('//body')->item(0);    

就像这样

<html> 
    <body>
        Newly prepended text
        <div>A sample block <div>and child block</div></div>
        Newly appended text    
    </body>
</html>  

顺便说一下,您不需要使用HTML实体来显示帖子中的HTML。只需通过4个空格进行缩进或标记您的代码并单击“{}”按钮即可。请参考我的编辑示例。 - Felix Kling
1个回答

24

您可以使用DOMText(或使用DOMDocument::createTextNode)创建文本节点:

$before = new DOMText('Newly prepended text');
// $before = $dom->createTextNode('Newly prepended text');
$after = new DOMText('Newly appended text');
// $after = $dom->createTextNode('Newly appended text');

现在,追加内容就是:

$body->appendChild($after);

要进行前置插入,我们可以使用DOMNode::firstChild来获取元素的第一个子节点,然后使用DOMNode::insertBefore方法:

$body->insertBefore($before, $body->firstChild);

如果有人来到这里想要用JavaScript实现这个功能,你可以在父节点上使用prepend - Brady Dowling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接