2013-06-13 8 views
0

Je Code HTML comme ceci:Comment supprimer des balises HTML avec des classes spécifiques?

<div id="printready"> 
    <div class="box-single"></div> 
    <div class="marker"></div> 
    <h2>sometext</h2> 
    <div id="news-single-img"></div> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <span class="cl"></span> 
    ... (remove everything since the last paragraph) 
</div> 

Quelle est la meilleure façon de supprimer ces balises, .box-single, .marker, h2, #news-single-img, je veux garder tous les paragraphes et supprimer le reste du dernier paragraphe.

J'ai essayé avec Nokogiri mais je n'ai pas trouvé une bonne solution. Le framework que j'utilise est Ruby on Rails!

+0

"Ruby on Rails" ISN » Dans une langue, Ruby est la langue. –

+0

Voulez-vous supprimer les classes '.box-single' et' .marker' du paramètre 'class', ou seulement les chaînes? Et supprimer de 'ou * après * il? –

+0

Je veux supprimer l'étiquette et le contenu. Et à partir du '' '. Tout ce que je veux garder, ce sont les balises '

' avec le contenu. Sry pour la description inexacte! –

Répondre

4

Supprimer les balises

doc.search('.box-single', '.marker', 'h2', '#news-single-img').remove 

Supprimer les noeuds suivants de dernière p

while node = doc.at('p:last').next 
    node.remove 
end 
+0

Merci! C'est ce que j'ai cherché! Plus facile que je pensais .. –

-1

utilisation de javascript vous pouvez faire comme ceci:

<script type="text/javascript"> 
    $(function() { 
     $("button").click(function() { 
      $(".box-single").remove(); 
     }); 
    }); 
</script> 
2

Il y a une certaine ambiguïté dans ce que vous voulez faire, alors voici une première passe:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<div id="printready"> 
    <div class="box-single"></div> 
    <div class="marker"></div> 
    <h2>sometext</h2> 
    <div id="news-single-img"></div> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <span class="cl"></span> 
    ... (remove everything since the last paragraph) 
</div> 
EOT 

%w[.box-single .marker].each do |klass| 
    doc.search(klass).each do |tag| 
    tag['class'] = nil 
    end 
end 

doc.at('h2').remove 

%w[#news-single-img].each do |tag_id| 
    doc.at(tag_id)['id'] = nil 
end 

loop do 
    next_tag = doc.at('span.cl').next_sibling 
    break unless next_tag 
    next_tag.remove 
end 

puts doc.to_html 

course qui me donne:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><div id="printready"> 
    <div class=""></div> 
    <div class=""></div> 

    <div id=""></div> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <span class="cl"></span> 
</div></body></html> 

Si vous souhaitez supprimer les paramètres class et id y:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<div id="printready"> 
    <div class="box-single"></div> 
    <div class="marker"></div> 
    <h2>sometext</h2> 
    <div id="news-single-img"></div> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <span class="cl"></span> 
    ... (remove everything since the last paragraph) 
</div> 
EOT 

%w[.box-single .marker].each do |klass| 
    doc.search(klass).remove_attr('class') 
end 

doc.at('h2').remove 

%w[#news-single-img].each do |tag_id| 
    doc.search(tag_id).remove_attr('id') 
end 

loop do 
    next_tag = doc.at('span.cl').next_sibling 
    break unless next_tag 
    next_tag.remove 
end 

puts doc.to_html 

Après avoir exécuté les paramètres sont partis:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><div id="printready"> 
    <div></div> 
    <div></div> 

    <div></div> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
    <span class="cl"></span> 
</div></body></html> 
Questions connexes