【问题标题】:removeAttributeNode which executed only one time in loop in php5 domremoveAttributeNode 仅在 php5 dom 中循环执行一次
【发布时间】:2013-02-14 15:31:49
【问题描述】:

我正在搜索删除锚标记中除 href 之外的所有属性的脚本。我发现了一些与我编写的解决方案非常相似的脚本。

$okattrs = array(
            'a' => array('href' => true),
            );

$content = '<div id="att"><a class="pl" title="hit me" id="myid" href="http://google.com" >Click On Google</a></div>';
$doc = new DomDocument();
$doc->loadHTML($content);

$a_tags = $doc->getElementsByTagName('a');
foreach($a_tags as $k => $a_tag_obj) {
    foreach ($a_tag_obj->attributes as $name => $attrNode)
    {
        if (!isset($okattrs[$a_tag_obj->nodeName][$name]))
        {
            $a_tag_obj->removeAttributeNode($attrNode);
        }
    }
}
echo    $content1=$doc->saveHTML();

现在我的问题是它只删除了第一个属性,即“类”。我调试并发现如果我删除具有 removeAttributeNode 循环的行可以正常工作 4 次,但是如果使用此循环只能工作一次,则只删除第一个属性并中断。

有人遇到过这个问题或有解决办法吗?

【问题讨论】:

    标签: php dom attributes anchor href


    【解决方案1】:

    最后我让代码运行起来。只是将 removeAttributeNode 移动到另一个循环的一个更改。

    foreach($a_tags as $a_tag_obj) { 
        $attribute_list = array(); 
        foreach ($a_tag_obj->attributes as $name => $attrNode) { 
            if (!isset($okattrs[$a_tag_obj->nodeName][$name])) { 
                $attribute_list[] = $name; 
            }    
        } 
        for($i=0;$i<sizeof($attribute_list);$i++) { 
            $a_tag_obj->removeAttribute($attribute_list[$i]); 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 2018-07-07
      相关资源
      最近更新 更多