这可能是一个非常简单的问题,但我对 Nokogiri 很陌生,我很想超越我所面临的这个小障碍。
如何将 contenteditable="true" 替换为 false 或使用 Nokogiri 将其完全删除?
<div contenteditable="true">
谢谢!
当您想使用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#[]=
),或者如果您想删除该节点使用的特定属性Nokogiri::XML::Node#delete
(类似于Hash#delete
)。
从评论我将如何检查 div 是否实际上具有 contenteditable 属性..
是的,可以使用方法Nokogiri::XML::Node#key?
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>"
将其设置为假:
doc.search('div[contenteditable=true]').each{|div| div[:contenteditable] = 'false'}
删除它们:
doc.search('div[contenteditable=true]').remove