我正在使用Nokogiri
并且无法弄清楚如何使用我提供的链接来包装特定单词。
我有<span class="blah">XSS Attack document</span>
我想改成哪个
<span class="blah"><a href="http://blah.com">XSS</a> Attack document</span>
我知道.wrap()
Nokogiri 中有一个,但它似乎不能只包装特定的XSS
文本。
我正在使用Nokogiri
并且无法弄清楚如何使用我提供的链接来包装特定单词。
我有<span class="blah">XSS Attack document</span>
我想改成哪个
<span class="blah"><a href="http://blah.com">XSS</a> Attack document</span>
我知道.wrap()
Nokogiri 中有一个,但它似乎不能只包装特定的XSS
文本。
通过显式创建和添加新节点
require 'nokogiri'
text = '<html> <body> <div> <span class="blah">XSS Attack document</span> </div> </body> </html>'
html = Nokogiri::HTML(text)
# get the node span
node = html.at_xpath('//span[@class="blah"]')
# change its text content
node.content = node.content.gsub('XSS', '')
# create a node <a>
link = Nokogiri::XML::Node.new('a', html)
link['href'] = 'http://blah.com'
link.content = 'XSS'
# add it before the text
node.children.first.add_previous_sibling(link)
# print it
puts html.to_html
通过使用inner_html=
require 'nokogiri'
text = '<html> <body> <div> <span class="blah">XSS Attack document</span> </div> </body> </html>'
html = Nokogiri::HTML(text)
node = html.at_xpath('//span[@class="blah"]')
node.inner_html = node.content.gsub('XSS', '<a href="http://blah.com">XSS</a>')
puts html.to_html
在我们的案例中,这两种解决方案都可以。但是在遍历节点树时,inner_html=
并不是最好的,因为它会删除所有子节点。因为它删除了所有节点子节点,所以它不是性能方面的最佳选择,当您只需要添加一个节点子节点时。