这可能是一个非常简单的问题,但我对Nokogiri很新,并希望超越我的这个小障碍。
如何使用Nokogiri将contenteditable =“true”替换为false或将其完全删除?
<div contenteditable="true">
谢谢!
答案 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