鉴于Nokogiri中的HTML文档,我想删除<p>
没有实际文本的所有节点.这包括<p>
带有空格和/或<br/>
标记的元素.最优雅的方式是什么?
这是一个更简单的修复:它删除了空格和br
标记.
鉴于HTML
"<p> </p><p>Foo<p/><p><br/> <br> </p>"
Run Code Online (Sandbox Code Playgroud)
解:
document.css('p').find_all.each do |p|
# Ruby on Rails Solution:
p.remove if p.content.blank?
# Ruby solution, as pointed out by Michael Hartl:
p.remove if p.content.strip.empty?
end
# document => <p>Foo</p>
Run Code Online (Sandbox Code Playgroud)
我会从这样的方法开始(Nokogiri::XML::Node
如果你愿意,请随意使用monkeypatch )
def is_blank?(node)
(node.text? && node.content.strip == '') || (node.element? && node.name == 'br')
end
Run Code Online (Sandbox Code Playgroud)
然后继续使用另一种检查所有子项是否为空的方法:
def all_children_are_blank?(node)
node.children.all?{|child| is_blank?(child) }
# Here you see the convenience of monkeypatching... sometimes.
end
Run Code Online (Sandbox Code Playgroud)
最后,得到document
和
document.css('p').find_all{|p| all_children_are_blank?(p) }.each do |p|
p.remove
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4618 次 |
最近记录: |