如何使用cheerio展开子元素?

时间:2016-05-04 10:31:29

标签: jquery node.js cheerio

我正在使用node.js。

我正在使用cheerio html解析器来读取html文档。

在这个例子中

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

我试过这个

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

cntext包含所需的div及其所有子项。

如何删除div并仅保留子节点?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要选择div,依靠选择器方法以及节点的特定属性来区分所需的div与其他所有属性。

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

请参阅https://github.com/cheeriojs/cheerio#selectors

您需要迭代所选div的直接子项

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

请参阅https://github.com/cheeriojs/cheerio#childrenselector

您需要移动在预先找到div

之后找到的每个孩子
$('div[class="a b c"]').children().each(function(index, element){
  $(element).insertAfter($(element).parent());
})

请参阅https://github.com/cheeriojs/cheerio#each-functionindex-element-

您需要删除空的div

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

请参阅https://github.com/cheeriojs/cheerio#remove-selector-

在飞行中写道,请告诉我。

答案 1 :(得分:1)

使用jquery的简单解决方案

  

您可以使用$(HTML_SSTRING_VAR)将其转换为html元素来创建html并使用.html()函数来获取innerHTML,就像在第一种情况下一样   可以使用

&#13;
&#13;
var s=$( "#Div" ).html();
var temp=$(s);
alert(temp.html());
&#13;
<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>
&#13;
&#13;
&#13; 最简单的纯JavaScript解决方案

  

找到最后一次出现的&#34;&lt;&#34;之间的子字符串并且第一次出现&#34;&gt;&#34;   假设本机javscript函数应该完美运行,这将是内容。

Javscript Substring Function Documentation

&#13;
&#13;
var s=$( "#Div" ).html();
s = s.substring(s.indexOf(">")+1,s.lastIndexOf("<")-1);
alert(s);
&#13;
<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>
&#13;
&#13;
&#13;

另一种简单的方法

  

只需创建一个div,在其中附加html内容,并在我们通过要删除的div的过程中访问所需内容作为子div的innerHTML

innerHTML Documentation

Children Documentation

&#13;
&#13;
var s=$( "#Div" ).html();
var temp = document.createElement('div');
temp.innerHTML = s;
alert(temp.children[0].innerHTML);
&#13;
<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>
 
&#13;
&#13;
&#13;

  

.unwrap() 返回: jQuery说明:删除该组的父级   来自DOM的匹配元素,将匹配的元素留在其中   地点。   .unwrap() documentation

ALL IN ONE FIDDLE