如何使用Nokogiri添加没有值的属性

时间:2015-05-22 00:17:21

标签: ruby nokogiri

我尝试将属性autoplay添加到iframe。 但是,此属性只是一个标记,它没有值:

<iframe src="..." autoplay></iframe

在Nokogiri中添加一个属性:

iframe = Nokogiri::HTML(iframe).at_xpath('//iframe')
iframe["autoplay"] = ""
puts iframe.to_s

---------- output ----------

"<iframe src="..." autoplay=""></iframe>"

Nokogiri有这样的方法可以做到这一点,还是应该在最后用正则表达式删除/=""/

由于

1 个答案:

答案 0 :(得分:1)

Nokogiri不能做你想要的,开箱即用。

  • 选项1:使用正则表达式解决方案。

  • 选项2:HTML语法表示布尔属性可以设置为自己的值,因此在您的代码中这是合法且好的:

    iframe["autoplay"] = "autoplay"
    

    输出:

    <iframe src="..." autoplay="autoplay"></iframe>
    
  • 选项3:改变Nokogiri宝石代码。

    $ edit nokogiri-1.6.6.2/lib/nokogiri/html/element_description_defaults.rb
    

    找到这一行:

    IFRAME_ATTRS = [COREATTRS, 'longdesc', 'name', ...
    

    并插入自动播放:

    IFRAME_ATTRS = [COREATTRS, 'autoplay', 'longdesc', 'name', ...
    

    现在,Nokogiri会将autoplay视为二进制属性,如您所愿。

    我正在为您的想法创建拉取请求,为每个人添加此功能给Nokogiri:

    https://github.com/sparklemotion/nokogiri/pull/1291