是否可以使用另一个HtmlElement包装HtmlElement?如果是这样,怎么样?
让我们说,我有这个HTML,我想用img
包裹div
:
<html>
<head><title>foo</title></head>
<body>
<img src="test.png"/>
<p>Hello World</p>
</body>
</html>
我尝试使用以下代码段(n.b. document element is HtmlDocument):
$htmlFile = New-Object -ComObject "HTMLFile"
$htmlFile.IHtmlDocument2_write((gc -Path "./html.htm" -Raw))
$htmlFile.documentElement.getElementsByTagName("img") | %{
$div = $htmlFile.createElement("div")
$div.className += "nonbreakingImage"
$void = $div.appendChild($_)
$_.OuterHtml = $div.OuterHtml
}
但不幸的是,这只是删除了图片标记:
<BODY><P>Hello World</P></BODY>
另一个想法是做这样的事情:
$htmlFile = New-Object -ComObject "HTMLFile"
$htmlFile.IHtmlDocument2_write((gc -Path "./html.htm" -Raw))
$htmlFile.documentElement.getElementsByTagName("img") | %{
$parent = $_.parentNode
$void = $parent.removeChild($_)
$div = $parent.appendChild($htmlFile.createElement("div"))
$div.className += " nonbreakingImage"
$void = $div.appendChild($_)
}
但这让我的孩子订单错了:
<BODY>
<P>Hello World</P>
<DIV class=" nonbreakingImage"><IMG src="test.png"></DIV>
</BODY>
欢迎任何想法和提示!
答案 0 :(得分:2)
您可以用<img>
节点替换 <div>
节点,然后将(现在浮动)<img>
节点添加到新添加的<div>
。在代码中:
$htmlFile.documentElement.getElementsByTagName("img") | %{
$div = $htmlFile.createElement("div")
$div.className += " nonbreakingImage"
$_.parentNode.replaceChild($div, $_)
$div.appendChild($_)
}
另外,$_.insertBefore($div, ...)
获得的节点$_.previousSibling(...)
可能更长。