jQuery 获取除子元素 X 之外的子元素的 HTML

Nyx*_*nyx 3 html javascript jquery node.js cheerio

如何使用 jQuery/Javascript<p>在第一个中选择两个元素的 HTML <div class="description?正则表达式也很好。这个 jQuery 选择实际上是在 Node.js 中在一个cheerio对象上完成的。

使用

$( $('.description')[0] ).children().not('h2').html()
Run Code Online (Sandbox Code Playgroud)

似乎只抓取文本

Foo Bar
Run Code Online (Sandbox Code Playgroud)

代替

<p>Foo</p> 
<p>Bar</p>
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class='description'>
  <h2>Hello world</h2>
  <p>Foo</p>
  <p>Bar</p>
</div>

<div class='description'>
  <h2>Goodbye world</h2>
  <p>Didi</p>
  <p>Deedee</p>
</div>
Run Code Online (Sandbox Code Playgroud)

Oli*_*der 5

如果你解构你的 jQuery 语句,你会得到以下内容:

$('.description')[0]
Run Code Online (Sandbox Code Playgroud)

将返回您的第一个<div>节点。

$( $('.description')[0] ).children()
Run Code Online (Sandbox Code Playgroud)

将返回该<div>节点的所有子节点的数组,因此这是一个包含三个节点的数组,一个<h2>和两个<p>

$( $('.description')[0] ).children().not('h2')
Run Code Online (Sandbox Code Playgroud)

将返回与上面相同的数组,减去<h2>.

$( $('.description')[0] ).children().not('h2').html()
Run Code Online (Sandbox Code Playgroud)

将应用于.html()这些节点中的每一个,即提取节点内的所有 html。而里面<p>Foo</p>Foo

这就是你要找的:

$( $('.description')[0] ).children().not('h2').prop('outerHTML')
Run Code Online (Sandbox Code Playgroud)

更新:基于Cheerio 文档:您需要这样做:

如果你想返回outerHTML,你可以使用$.html(selector):

所以,在你的情况下,我会尝试:

$( $('.description')[0] ).children().not('h2').html('p')
Run Code Online (Sandbox Code Playgroud)