Javascript Ho使用PHP循环访问Dom并查找数据id
我有以下问题。我想读入一个外部HTML文件。我只需要body标记之间的HTML元素。为此,我在下面创建了PHP代码,它可以正常工作。我现在需要再添加一个功能,当我循环时,我需要检查HTML元素是否获得了数据id,如果是,那么我必须向该节点添加一个值。该值保存在一个PHP数组中,键与data-id相同。有什么提示我可以这样做吗?我认为它需要进入foreach$children作为$child循环,对吗?如果是,我如何检查数据id?任何暗示都将不胜感激Javascript Ho使用PHP循环访问Dom并查找数据id,javascript,php,html,Javascript,Php,Html,我有以下问题。我想读入一个外部HTML文件。我只需要body标记之间的HTML元素。为此,我在下面创建了PHP代码,它可以正常工作。我现在需要再添加一个功能,当我循环时,我需要检查HTML元素是否获得了数据id,如果是,那么我必须向该节点添加一个值。该值保存在一个PHP数组中,键与data-id相同。有什么提示我可以这样做吗?我认为它需要进入foreach$children作为$child循环,对吗?如果是,我如何检查数据id?任何暗示都将不胜感激 $doc = new DOMDocument
$doc = new DOMDocument();
$doc->loadHTMLFile("extracontent.html");
function DOMinnerHTML(DOMNode $element,$attr)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
$oldDom = $doc->getElementsByTagName("body");
foreach ($oldDom as $element)
{
$newDom = DOMinnerHTML($element);
}
首先,我将使用xpath查询查找正文中具有数据id属性的所有子节点,然后将其追加或构建数组:
$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$dox = new DOMXPath($dom);
$nodes = $dox->query('/html/body//*[@data-id]');
$array = [];
foreach ($nodes as $key => $node) {
$node->appendChild(new DOMText('add text'));
$array[$key] = ['data-id' => 'add text'];
}
echo $dom->saveHTML();
非常有趣的解决方案。非常感谢你。我仍在试图弄清楚每一部分以及它的作用。愚蠢的问题,但是,既然这个值是我的PHP数组中的匹配键,这就是appendChild所需要的,如果我看得对的话……如果你需要在上面附加一些东西,代码段会按原样工作,但如果你想存储它的值,你可以通过textContent属性访问它:$node->textContentI实际上必须找到它例如,我现在需要知道这个$node获得了数据id maintTitle,这样我就可以将它与我的PHP数组的值相匹配$节点->文本内容似乎没有给我这个信息,或者我误解了你?啊,对不起,我现在知道了。只需使用getAttribute'data-id':$node->getAttribute'data-id'就可以了,一切似乎都正常。非常感谢你的帮助!!