1

我想从 HTML 页面(实际上是 tinymce 用户输入)中删除所有不符合特定标准(class = "int" 或 class = "ext")的图像,并且我正在努力使用正确的方法。这就是我目前正在做的事情:

hbody = Hpricot(input)
@internal_images = hbody.search("//img[@class='int']")
@external_images = hbody.search("//img[@class='ext']")

但我不知道如何找到类具有错误值的图像(不是“int”或“ext”)。

我还必须遍历元素以检查不是标准 html 的其他属性(我使用它们来设置内部值,例如我在属性 dbsrc 中设置的 DB id)。我也可以访问这些属性吗?有没有办法在某些元素(在 hpricot 搜索结果中)不符合我的条件时删除它们?

谢谢你的帮助!

4

2 回答 2

3
>> doc = Hpricot.parse('<html><img src="foo" class="int" /><img src="bar" bar="42" /><img src="foobar" class="int"></html>')
=> #<Hpricot::Doc {elem <html> {emptyelem <img class="int" src="foo">} {emptyelem <img src="bar" bar="42">} {emptyelem <img class="int" src="foobar">} </html>}>
>> doc.search("img")[1][:bar]
=> "42"
>> doc.search("img") - doc.search("img.int")
=> [{emptyelem img src"bar" bar"42"}]

获得搜索结果后,您可以使用正常的数组操作。非标准属性可通过 [] 访问。

于 2009-06-29T14:52:41.787 回答
2

查看not CSS 选择器

(hbody."img:not(.int)")
(hbody."img:not(.ext)")

不幸的是,您似乎不能 concat not 表达式。您可能想要获取所有 img 节点并删除那些 .css 选择器既不包含 .int 也不包含 .ext 的节点。此外,您可以使用差异运算符来计算哪些元素不属于两个集合。

使用.remove删除节点或元素的方法:Hpricot Altering文档。

于 2009-06-29T15:02:44.683 回答