Возможно, вам нужно это:
content.css('ol').reverse.each do |ol|
ol.css('> li').each_with_index { |li,index| li.inner_html="#{index + 1} "+li.inner_html }
end
content.css('ul > li').reverse.each { |li| li.inner_html="\u2022 "+li.inner_html }
puts content
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<ol>
<li>1 Introduction
<ol>
<li>1 hyy ssss</li>
</ol>
</li>
<li>2 Description</li>
<li>3 Observation</li>
<li>4 Results</li>
<li>5 Summary</li>
</ol>
<ul>
<li>• Introduction</li>
<li>• Description
<ul>
<li>• Observation
<ul>
<li>• Results
<ul>
<li>• Summary</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>• Overview</li>
</ul>
</body></html>
Причина совершения reverse
-
Рассмотрим дом:
<ul>
<li>Description
<ul>
<li>Observation</li>
</ul>
</li>
</ul>
Когда вы делаете content.css('ul > li')
, вы получаете в порядке [описание, наблюдение]. Без reverse
, когда вы запускаете фрагмент, вы изменяете описание , но это также изменит узел object_id
из наблюдение . Затем вы изменили узел наблюдения , который нигде не указан в content
. Поэтому я поменял его и приобрел children
перед родителями. Сделав это, я убедился, что сначала меняю дочерний элемент, а затем изменил родительский, чтобы parent знал об изменении дочернего элемента и нигде не было ни одного ссылочного узла.
Предположим, идентификатор узла описания равен 1234, а идентификатор узла наблюдения равен 2345. Когда вы мутировали описание , оно изменилось само, но также изменило и его дочерний элемент (2345). Новый идентификатор объекта может быть 3456 и 4567 соответственно. Затем вы изменили 2345 (по итерации), но это не дает никакого эффекта, потому что ваш content
показывает 3456 -> 4567
Надеюсь, это имеет смысл.