2017-10-30 20 views
0

Nokogiriを使用してcssメソッドを使用してHTMLドキュメントを検索しています。私が要素を見つけると、別の要素にそれをラップし、それをそのノードに再挿入することによって変更します。問題は、私が探しているクラスを持つ子を含む要素が、子ノードをスキップする親ノードを変更したためです。Nokogiriがドキュメントを検索して親ノードを変更して子ノードにアクセスできない

ここで説明する例を示します。

html_string = <<-HEREDOC 
    <div class="mt-1 parent-div"> 
    <div class="mt-1 child-div">Hello</div> 
    </div> 
HEREDOC 

doc = Nokogiri::HTML(html_string) 
doc.css('.mt-1').each do |node| 
    node.replace(Nokogiri::HTML::DocumentFragment.parse("<div>#{node.to_html}</div>" 
end 

child-div親はそれが再建内容だとそれが更新されたノードを研究しませんでしたので、アクセスれることは決してありません。

親ノードを更新して次のループで子ノードにアクセスできる方法はありますか?

答えて

0

私は同僚からの相談のビットで私自身の質問に対する答えを考え出しました。問題は、私たちが親から子に変更されていることです。私が本当にやりたいことは、子どもから親に変更して、決して何かの内容を混乱させないことです。

これを行うには、要素の持つ祖先の数の逆順でノードリストをソートします。

# the key change -> .sort_by{ |n| n.ancestors.size }.reverse!  
doc.css('.mt-1').sort_by{ |n| n.ancestors.size }.reverse!.each do |node| 
    node.replace(Nokogiri::HTML::DocumentFragment.parse("<div>#{node.to_html}</div>" 
end 
関連する問題