使用Nokogiri编辑非class或id的div标签

时间:2013-10-14 07:55:24

标签: ruby nokogiri

这可能是一个非常简单的问题,但我对Nokogiri很新,并希望超越我的这个小障碍。

如何使用Nokogiri将contenteditable =“true”替换为false或将其完全删除?

<div contenteditable="true">

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您想使用 Nokogiri 完全删除它,这是一种方法:

require 'nokogiri'

doc = Nokogiri::HTML.parse('<div contenteditable="true">')
doc.at('div') 
# => #(Element:0x504911a {
#      name = "div",
#      attributes = [
#        #(Attr:0x5048db4 { name = "contenteditable", value = "true" })]
#      })
node=doc.at('div')
node
# => #(Element:0x504911a {
#      name = "div",
#      attributes = [
#        #(Attr:0x5048db4 { name = "contenteditable", value = "true" })]
#      })

node.delete('contenteditable')
node
# => #(Element:0x504911a { name = "div" })

如果您想将contenteditable="true"替换为false Nokogiri ,可采用以下方法:

require 'nokogiri'

doc = Nokogiri::HTML.parse('<div contenteditable="true">')
doc.at('div') 
# => #(Element:0x495cb2c {
#      name = "div",
#      attributes = [
#        #(Attr:0x495c88e { name = "contenteditable", value = "true" })]
#      })
node=doc.at('div')
node.to_s
# => "<div contenteditable=\"true\"></div>"
node['contenteditable']=false
node.to_s
# => "<div contenteditable=\"false\"></div>"

Nokogiri::XML::Node将所有属性名称/值保存为Hash的键/值对。以下是一个示例:

require 'nokogiri'

doc = Nokogiri::HTML.parse('<div contenteditable="true" class = "foo">')
node=doc.at('div')
node.keys
# => ["contenteditable", "class"]
node.values
# => ["true", "foo"]

因此,如果要更改节点属性的值,请使用Nokogiri::XML::Node#[]=(类似于Hash#[]=),或者如果要删除该节点的特定属性,请使用{{3} }(类似于Nokogiri::XML::Node#delete)。

从评论 我如何检查div是否确实具有contenteditable属性 ..

是的,可以使用方法Hash#delete

require 'nokogiri'

doc = Nokogiri::HTML.parse('<div contenteditable="true" class = "foo">')
node=doc.at('div')
node.key?('class') # => true
node.key?('foo') # => false
node.delete('class') if node.key?('class')
node.delete('class') if node.key?('foo')
node.to_s
# => "<div contenteditable=\"true\"></div>"

答案 1 :(得分:0)

将其设为false:

doc.search('div[contenteditable=true]').each{|div| div[:contenteditable] = 'false'}

删除它们:

doc.search('div[contenteditable=true]').remove