如何使用 cheerio 立即获得 child 的 <ul>
How to get immediate child of <ul> using cheerio
我有 html 文件 html 内容如下:
<ul>
<li class="class_1">111</li>
<li class="class_2">
<ul>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ul>
</li>
<li class="class_5">444</li>
</ul>
在 cheerio 模块中加载 html 内容后搜索即时 li childs 它正在来自 child ul 的所有项目以及像这样:
this._$$=cheerio.load(<htmlContent>, {xmlMode : true});
const liElements = this._$$(`ul > *`);
当我在转换为 html 内容后打印 liElements 时,我得到这样的输出:
<li class="class_1">111</li>
<li class="class_2">
<ol>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ol>
</li>
<li class="class_5">444</li>
<li class="class_3">222</li>
<li class="class_4">333</li>
您可以看到来自 child 的内容 ul 在这里重复。我尝试了 cheerio 文档中的很多选项,但没有成功。任何人都可以帮助我立即获得 li child of ul .
非常感谢。
问题是 ul > *
太笼统了,它会 return 所有 ul child 甚至是 li 标签下的 ul
也许您有两种解决方案来解决这种情况
1) 在 ul
上面放一个 class 名字
<ul class="main-ul">
<li class="class_1">111</li>
<li class="class_2">
<ul>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ul>
</li>
<li class="class_5">444</li>
</ul>
selector 变成了 const liElements = this._$$(.main-ul > li
);
2) 在 li 标签中获取 ul 的 child 并将它们从所有 child
的列表中删除
const liWithLiParent= this._$$(`li > ul > *`);
const liElements = this._$$(`ul > *`).filter(li => !liWithLiParent.some(liWithParent => liWithParent === li));
最简单的就是删除子 ul 的
$('ul ul').remove()
我有 html 文件 html 内容如下:
<ul>
<li class="class_1">111</li>
<li class="class_2">
<ul>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ul>
</li>
<li class="class_5">444</li>
</ul>
在 cheerio 模块中加载 html 内容后搜索即时 li childs 它正在来自 child ul 的所有项目以及像这样:
this._$$=cheerio.load(<htmlContent>, {xmlMode : true});
const liElements = this._$$(`ul > *`);
当我在转换为 html 内容后打印 liElements 时,我得到这样的输出:
<li class="class_1">111</li>
<li class="class_2">
<ol>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ol>
</li>
<li class="class_5">444</li>
<li class="class_3">222</li>
<li class="class_4">333</li>
您可以看到来自 child 的内容 ul 在这里重复。我尝试了 cheerio 文档中的很多选项,但没有成功。任何人都可以帮助我立即获得 li child of ul .
非常感谢。
问题是 ul > *
太笼统了,它会 return 所有 ul child 甚至是 li 标签下的 ul
也许您有两种解决方案来解决这种情况
1) 在 ul
上面放一个 class 名字<ul class="main-ul">
<li class="class_1">111</li>
<li class="class_2">
<ul>
<li class="class_3">222</li>
<li class="class_4">333</li>
</ul>
</li>
<li class="class_5">444</li>
</ul>
selector 变成了 const liElements = this._$$(.main-ul > li
);
2) 在 li 标签中获取 ul 的 child 并将它们从所有 child
的列表中删除const liWithLiParent= this._$$(`li > ul > *`);
const liElements = this._$$(`ul > *`).filter(li => !liWithLiParent.some(liWithParent => liWithParent === li));
最简单的就是删除子 ul 的
$('ul ul').remove()