【问题标题】:getElementbyId returns null on server but works fine on my local wampgetElementbyId 在服务器上返回 null 但在我的本地 wamp 上工作正常
【发布时间】:2014-09-09 13:26:14
【问题描述】:

当运行这个 php 脚本时:

$doc = new DOMDocument();
$doc->loadHTMLFile("../counter.html");
$ele2 = $doc->getElementById ( "coupon_id" );
if($ele2){
    $ele2->nodeValue = $result["coupon_code"];
}
$response["list"]= $doc->saveHTML();

$ele2 在我的网络服务器上被发现为空,因此它不会进入 if 条件,但它在我的本地服务器上工作正常。这是我的 counter.html 文件:

  <div class="panel panel-success">
    <div class="panel-heading">
      <h3 id="coupon" class="panel-title">Coupon name 1</h3>
    </div>
<p id="coupon_id" hidden>coupon id</p>
    <div id="counter-up" class="panel-body">
      0
    </div>
  </div>

我已经通过以下操作确保 html 文件已成功加载:echo "&lt;pre&gt;".$doc-&gt;saveHTML()."&lt;/pre&gt;";

【问题讨论】:

  • 我认为,您在 DOM 完全加载/准备好之前访问 DOM 元素。
  • 您尝试加载的文件是否找到并成功加载?
  • @prava 我认为您没有阅读问题。这是PHP。 loadHTMLFile 是同步的。
  • 您检查错误日志了吗?您是否启用了所有错误和警告?你比较过 PHP 版本和安装的模块吗?
  • 评论this answer可能对你有帮助

标签: php html dom


【解决方案1】:

来自documentation

要使此功能正常工作,您需要使用DOMElement::setIdAttribute 或将属性定义为ID 类型的DTD 设置一些ID 属性。在后面的[sic] 情况下,您需要在使用此功能之前使用DOMDocument::validateDOMDocument::$validateOnParse 验证您的文档。

由于您没有定义 DTD,您可以在加载 HTML 文件之前添加$doc-&gt;validateOnParse = true;。这应该根据 HTML DTD 进行验证并设置适当的 ID 属性。

如果这对您不起作用,user-contributed notes 中提到了一个备用解决方案:

$xpath = new DOMXPath($doc);
$ele2 = $xpath->query("//*[@id='coupon_id']")->item(0);

【讨论】:

    【解决方案2】:

    帮助了我

    @ $ doc-&gt; loadHTML ('&lt;? xml encoding = "UTF-8"&gt; &lt;! DOCTYPE html PUBLIC "- // W3C // DTD HTML 4.0 Transitional // EN" "http://www.w3.org/ TR / REC-html40 / loose.dtd "&gt; '. $ html);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多