使用dom将锚文本移动到锚标记之外

时间:2014-11-06 18:50:17

标签: php html dom

我正在使用PHP的DOMDocument来解析HTML文档的部分内容。

问题:

所有锚点(不是指向锚点的链接)都设置如下:

<a name="_Toc1234567">Overview of Data</a>

我希望格式如下:

<a name="_Toc1234567"></a>Overview of Data

文档中有很多这些,但在所有情况下,锚都有一个指定的名称 - 始终唯一。所有链接都没有指定名称。

到目前为止,我有这个:

<?php

$d = new DOMDocument;
$d->loadHTML(file_get_contents('source.html'));

$anchors = $d->getElementsByTagName('a');

foreach ($anchors as $anchor) {

      $name = $anchor->getAttribute('name'); 
      $atext = $anchor->nodeValue;

      if (isset($name)) {
        // move the anchor text outside of the anchor tag
        // like this  <a name="_Toc1234567"></a>Anchor text
      }
}

$final = $d->saveHTML();

file_put_contents("result.html", $final);
?>

2 个答案:

答案 0 :(得分:1)

如果jQuery适合您,您可以使用该代码执行此操作:

$.each($('a'), function(){
    var content = $(this).html();
    $(this).html('');
    $(this).after(content);
});

小提琴:http://jsfiddle.net/nikoloza/xt9ja4e0/

答案 1 :(得分:0)

您可以创建新的文本节点

 $textNode = $d->createTextNode ( $anchor->nodeValue );

然后清空nodeValue

 $anchor->nodeValue = '';

但据我所知,你需要父母和下一个兄弟来添加$ textNode。

阅读本文和评论以获得一个想法: http://php.net/manual/de/domnode.insertbefore.php