0

这可能是一个非常简单的问题,但我对 Nokogiri 很陌生,我很想超越我所面临的这个小障碍。

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

<div contenteditable="true">

谢谢!

4

2 回答 2

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#[]=),或者如果您想删除该节点使用的特定属性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>"
于 2013-10-14T08:14:04.603 回答
0

将其设置为假:

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

删除它们:

doc.search('div[contenteditable=true]').remove
于 2013-10-14T10:06:54.863 回答