getElementbyId在服务器上返回null,但在我的本地wamp上工作正常

时间:2014-07-18 11:57:14

标签: php html dom

运行这个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 "<pre>".$doc->saveHTML()."</pre>";

2 个答案:

答案 0 :(得分:2)

来自documentation

  

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

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

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

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

答案 1 :(得分:0)

<!的加法! DOCTYPE html PUBLIC“-// W3C // DTD HTML 4.0 Transitional // EN”“ http://www.w3.org/TR/REC-html40/loose.dtd”>帮助了我

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