2010-01-05 38 views
1

我想從html中刪除dom事件屬性列表?這個怎麼做?如:如何使用Hpricot從html中刪除事件屬性?

before = "<div onclick="abc" >abc</div>" 
after = clean_it(before) // after => "<div>abc</div>"  


DOM_EVENT_TO_BE_REMOVE = "onclick|ondblclick|onerror|onfocus|onkeydown" // i want to remove these events 

// i want to do it like this 
def clean_it(html) 
    doc = Hpricot(html)  
    doc.search(DOM_EVENT_TO_BE_REMOVE).remove_attribute(DOM_EVENT_TO_BE_REMOVE) 
    doc.to_s 
end 

謝謝。

回答

2

使用 「remove_attr」,例如:

doc.search("[@onclick]").remove_attr("onclick") 

因此,對於你的文檔做這樣的事情:

DOM_EVENT_TO_BE_REMOVE = ["onclick", "ondblclick", "onerror", "onfocus", "onkeydown"] 
DOM_EVENT_TO_BE_REMOVE.each do |de| 
    doc.search("[@#{de}]").remove_attr(de) 
end 
+1

'DOM_EVENT_TO_BE_REMOVE =%(重量)[點擊onfocus此onError的聚焦狀態的onkeydown]'可能是有點清潔。 – kejadlen 2010-01-05 15:26:09

+0

非常感謝。 – www 2010-01-05 16:05:20

+0

是否需要doc.search(「* [@ onclick]」)?我認爲在查找屬性之前,css語法需要一個元素類型。通配符讓它搜索所有元素。 – Lukas 2010-01-05 18:52:35