代码之家  ›  专栏  ›  技术社区  ›  Bidoubiwa

如何在不删除其子节点的情况下更改节点的textValue

  •  0
  • Bidoubiwa  · 技术社区  · 6 年前

    想象一下这个HTML:

    <html>
          <head><title>Nice page</title></head>
          <body>Hello World <a href=http://google.com>This is a link</a>
                <br />
                <a href=http://www.google.com> this also
                    <img src=wrong.image> and here
                </a>
         </body>
    </html>
    

    当我尝试将链接的所有文本用大写字母表示时,它会删除链接标签的img标签。

    <html>
           <head><title>Nice page</title></head>
           <body>Hello World <a href=http://google.com>THIS IS A LINK</a>
                <br />
                <a href=http://www.google.com> THIS ALSO AND HERE</a>
          </body>
    </html>
    

    以下是我使用的PHP:

    libxml_use_internal_errors(true);
    $doc = new DOMDocument();
    $doc->loadHTMLFile("index.html");
    $elements = $doc->getElementsByTagName("a");
    foreach($elements as $elem)
    {
        $elem->nodeValue = strtoupper($elem->nodeValue);
    }
    echo $doc->saveHTML();
    

    我如何保护孩子们?

    1 回复  |  直到 6 年前
        1
  •  2
  •   salathe    6 年前

    可以使用xpath查询专门获取链接中的文本节点。

    libxml_use_internal_errors(true);
    $doc = new DOMDocument();
    $doc->loadHTMLFile("example.html");
    
    $xpath = new DOMXPath($doc);
    $linkTextNodes = $xpath->query('//a/descendant::text()');
    foreach ($linkTextNodes as $node) {
        $node->textContent = strtoupper($node->textContent);
    }
    echo $doc->saveHTML();