У меня есть HTML, который должен быть преобразован, если некоторые теги заменены на другие теги.Найти и заменить целые HTML-узлы на Nokogiri
Я не знаю об этих тегах, потому что они будут происходить из db. Итак, set_attribute
или name
методы Nokogiri мне не подходят.
мне нужно сделать это, в некотором смысле, как в этом псевдокоде:
def preprocess_content
doc = Nokogiri::HTML(self.content)
doc.css("div.to-replace").each do |div|
# "get_html_text" will obtain HTML from db. It can be anything, even another tags, tag groups etc.
div.replace self.get_html_text
end
self.content = doc.css("body").first.inner_html
end
Я нашел Nokogiri::XML::Node::replace
метод. Я думаю, это правильное направление.
Этот метод ожидает некоторый параметр node_or_tags
.
Какой метод я должен использовать для создания нового узла из текста и замены его на него?
Это does't работает для меня. Я генерирую ошибку: «нет контекстного анализа на несвязанных узлах». Он жалуется таким образом на строку, где свойство «inner_html» установлено – AntonAL
Я только что протестировал, и он работает в моей среде. Попробуйте заменить 'new_node.inner_html =' на 'new_node.content =' и дважды проверьте наличие ошибок. Должно. –
Спасибо, я понял это. Проблема заключалась в том, что в DOM был изменен еще несвязанный элемент. Сначала мы должны заменить, а затем изменить. Это хорошо, но я столкнулся с более запутанной проблемой - никакая разметка не может быть вставлена в качестве замены. Например, когда я говорю «new_node.inner_html =»