1

特定の基準 (class = "int" または class = "ext") を満たさない HTML ページ (実際には tinymce ユーザー入力) からすべての画像を削除したいのですが、正しいアプローチに苦労しています。それが私がこれまで行っていることです:

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)")

残念ながら、not 式を連結することはできないようです。すべての img ノードを取得し、.css セレクターに .int も .ext も含まれていないノードを削除することをお勧めします。さらに、差分演算子を使用して、両方のコレクションの一部ではない要素を計算できます。

メソッドを使用し.removeてノードまたは要素を削除します: Hpricot Alteringのドキュメント。

于 2009-06-29T15:02:44.683 に答える