2016-05-04 7 views
4

Ich verwende node.js.Wie kann man Kinderelemente mithilfe von Cheerio auspacken?

Ich benutze cheerio HTML-Parser, um ein HTML-Dokument zu lesen.

In diesem Beispiel

<div class="a b c"> 
     <a id="ddd"/> 
     sample 
</div> 

Ich habe versucht, diese

var cheerio = require('cheerio'); 
    var c$ = cheerio.load(/*html content*/); 
    var cntext = c$('div').html(); 

cntext die gewünschte div enthält und alle seine Kinder.

Wie kann ich das div entfernen und nur die untergeordneten Knoten behalten?

Vielen Dank im Voraus.

Antwort

1

einfache Lösung mit jquery

Sie einfach Elemente mit $ (HTML_SSTRING_VAR) in HTML umwandeln kann eine HTML und .html() Funktion erstellen innerHTML- wie im ersten Fall bekommen können verwenden

var s=$("#Div").html(); 
 
var temp=$(s); 
 
alert(temp.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<div id="Div"> 
 
    
 
<div class="demo-container"> 
 
    <div class="demo-box">Demonstration Box</div> 
 
</div> 
 
    </div>
Simplest Reines jav ascript Lösung

Finden Sie einfach den Teil zwischen dem letzten Auftreten von „<“ und den ersten Vorkommen von „>“ , die der Inhalt würde unter der Annahme, dass natives javscript Funktionen sollten perfekt funktionieren.

Javscript Substring Function Documentation

var s=$("#Div").html(); 
 
s = s.substring(s.indexOf(">")+1,s.lastIndexOf("<")-1); 
 
alert(s);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<div id="Div"> 
 

 
<div class="demo-container"> 
 
    <div class="demo-box">Demonstration Box</div> 
 
</div> 
 
    </div>

Eine weitere einfache Möglichkeit es im Inneren

einfach zu tun ein div Erstellen Sie die HTML-Inhalte anhängen und Zugriff auf den gewünschten Inhalt als innerHTML des Kindes di v in dem Prozess, den wir durch die div passieren, die beseitigt werden sollte

innerHTML Documentation

Children Documentation

var s=$("#Div").html(); 
 
var temp = document.createElement('div'); 
 
temp.innerHTML = s; 
 
alert(temp.children[0].innerHTML);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<div id="Div"> 
 

 
<div class="demo-container"> 
 
    <div class="demo-box">Demonstration Box</div> 
 
</div> 
 
    </div> 
 

.unwrap()Returns: jQuery Beschr Hinweis: Entfernen Sie die Eltern der Menge von übereinstimmenden Elementen aus dem DOM und lassen Sie die übereinstimmenden Elemente in ihrem Platz. .unwrap() documentation

ALL IN ONE FIDDLE

1

müssen Sie die div auswählen, verlassen Sie sich auf die Selector-Methode dafür und spezifische Attribute des Knotens, um die gewünschte div gegen alle anderen zu unterscheiden.

$('div[class="a b c"]')

siehe https://github.com/cheeriojs/cheerio#selectors

Sie direkte Kinder des ausgewählten div,

$('div[class="a b c"]').children().each(fn)

siehe https://github.com/cheeriojs/cheerio#childrenselector

Sie verschieben müssen jeweils Kinder nach dem gefunden iterieren müssen vorläufig gefunden div

$('div[class="a b c"]').children().each(function(index, element){ 
    $(element).insertAfter($(element).parent()); 
}) 

siehe https://github.com/cheeriojs/cheerio#each-functionindex-element-

Sie die leere div

$('div[class="a b c"]').remove()

siehe https://github.com/cheeriojs/cheerio#remove-selector-

on the fly entfernen müssen schrieb, lassen Sie mich wissen.