Как обернуть слова в HTML-документ без атрибутов и имен тегов - PullRequest
0 голосов
/ 14 июня 2011

У меня есть HTML-документ с длинными словами:

<div>this is a veeeeeeeeeeeerryyyyyyyyloooongwoooord<img src="/fooooooooobaaar.jof" ></div>

Я хочу обернуть его без обрезки тегов или его атрибутов:

<div>this is a veeeeeeeeeeeerryyyyy yyyloooongwoooord<img src="/fooooooooobaaar.jof" ></div>

Кроме того, возможно, что у меня вообще не будет тега HTML.

Я попробовал Nokogiri, но он вставляет абзац в ввод без тегов и оборачивает весь ответ HTML-документом, что не является моей целью.

Каков наилучший способ сделать это?

require "Nokogiri"
class String
  def wrap()
    doc = Nokogiri::HTML(self)
    doc.at("body").traverse do |p|
      if p.is_a?(Nokogiri::XML::Text)
        input = p.content
        p.content = input.scan(/.{1,25}/).join(" ")
      end
    end
    doc.to_s # I want only the wrapped string, without the head/body stuff
  end
end

Ответы [ 2 ]

0 голосов
/ 15 июня 2011

Это выглядит как отправная точка для вас:

require 'nokogiri'

max_word_length = 30
html = '<div>this is a veeeeeeeeeeeerryyyyyyyyloooongwoooord<img src="/fooooooooobaaar.jof" ></div>'

doc = Nokogiri::HTML.fragment(html)

doc.search('text()').each do |n|
  n.content = n.content.split(' ').map { |l|
    if (l.size > max_word_length)
      l = l.scan(/.{1,#{ max_word_length }}/).join("\n")
    end
    l
  }.join(' ')
end

puts doc.to_html
# >> <div>this is a veeeeeeeeeeeerryyyyyyyyloooong
# >> woooord<img src="/fooooooooobaaar.jof">
# >> </div>
0 голосов
/ 14 июня 2011

Я думаю, что использование Nokogiri :: XML (self) вместо Nokogiri :: HTML (self) поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...