【问题标题】:PHP undefined method DOMNodeList::setAttribute()PHP 未定义方法 DOMNodeList::setAttribute()
【发布时间】:2016-01-21 18:36:24
【问题描述】:

我从 PHP 收到此错误消息:"undefined method DOMNodeList::setAttribute()" from line 9。我正在尝试在我的服务器上更改我的 HTML 中图像的 src,到目前为止,这是我的代码:

<?php
if (isset($_POST['id']) && isset($_POST['name'])) 
{
   $id = $_POST['id'];
   $name = $_POST['name'];
   $html = $_POST['html'];
   $dom = new domDocument;
   $dom->loadHTML($html);
   $node = $dom->getElementsByTagName( 'img' ); 
   $node ->setAttribute('src', 'images/' . $name);//line 9
   echo $dom->saveHTML();
} 

echo 'error';
exit;

//html
<div><img id="picture" src=""></div>

变量 'id' 是特定 HTML 行的 HTML id,name 是图像的名称,HTML 是 HTML 行。

据我研究,我选择了特定的 HTML 行,然后将其加载到我的 DOM 变量中。然后我指定元素,即:“img”,然后我可以通过使用 setAttribute 对其进行编辑,但这不起作用。我只想把这个img的来源改成“图片”的ID。

【问题讨论】:

    标签: php html


    【解决方案1】:

    但是 DOMNodeList 没有那个方法。

    getElementsByTagName 是 DOMDocument 类的一部分。

    你不需要投射任何东西,只需调用方法:

    $links = $dom->getElementsByTagName('a');
    
    foreach ($links as $link) {
        $spans = $link->getElementsByTagName('span');
    }
    

    顺便说一下,DOMElement 是 DOMNode 的子类。如果你在谈论一个 DOMNodeList,那么可以访问这样一个列表中的元素,可以是上面介绍的方法,使用 foreach 循环,也可以使用 DOMNodeList 的 item() 方法

    $link_0 = $dom->getElementsByTagName('a')->item(0);
    

    【讨论】:

    • 这将是因为您传递给 $html 的内容。输出并尝试修复它。
    • 嗨,我这样做了,根据我的回声,源发生了变化,但是如果我检查元素,源保持不变。我是否需要执行更多步骤然后“echo $dom->saveHTML();”
    【解决方案2】:

    getElementsByTagName 返回节点列表。试试看:

    $nodes = $dom->getElementsByTagName('img');
    foreach ($nodes as $node) {
        $node->setAttribute('src', 'images/' . $name);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 2012-11-19
      • 2017-06-21
      • 2018-04-26
      • 2012-01-14
      • 2012-07-27
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多