脚本宝典收集整理的这篇文章主要介绍了php – 为什么DomDocument getElementsByTagName会返回一半NodeList?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
/* Input HTML <div id="toobar_top"> <widget id="flag_holder"></widget> <widget id="horizontal_menu"></widget> </div> <div id="header"> <widget name="header"></widget> </div> */
我想要做的是用一些有用的东西“翻译”每个小部件……它们是带有参数的简单占位符.
PRivate function widgeter($doc) { //Give IT an DomDocument HTML containing <widget> elements and will translate them into usable stuff $this->_widgetList = $doc->getelementsbytagname($this->_widgetTransformTo); foreach ($this->_widgetList as $widget) { $data = array(); if ($widget->hasAttributes()) { foreach ($widget->attributes as $attribute) { $data[][$attribute->name] = $attribute->value; // @TODO: Implements Widget Transformation } } // Next 2 lines are just for debug $string = serialize($data); $newWidget = $doc->createElement('p',$string); $widget->parentNode->replaceChild($newWidget,$widget); } return $doc; }
然后,当我保存html()$doc时,我看到:
/* Output HTML <div id="toobar_top"> <p>[{"id":"flag_holder"}]</p> <widget id="horizontal_menu"></widget> </div> <div id="header"> <p>[{"id":"header"}]</p> </div> */
为什么“horizontal_menu”没有被翻译?
小部件的位置并不重要(我尝试只使用一个包含所有小部件的div,每个小部件使用div).
我弄不清楚……
基本上,我认为正在发生的事情是:
>您替换< widget>的第一个实例(第0项).
>指针前进到下一个项目(项目1).
>项目0已被替换,不再存在.
>发生项目转移:项目1变为项目0,项目2变为项目1.
>指针仍然指向项目1(最初是项目2,有效地跳过节点).
您需要做的是将元素保存在数组中然后更改它们,而不是在DOMNodeList上循环:
$this->_widgetList = array(); foreach ($domNodeList as $node) { $this->_widgetList[] = $node; } foreach ($this->_widgetList as $widget) { // do stuff }
以上是脚本宝典为你收集整理的php – 为什么DomDocument getElementsByTagName会返回一半NodeList?全部内容,希望文章能够帮你解决php – 为什么DomDocument getElementsByTagName会返回一半NodeList?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。