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

时间:2015-12-12 02:47:03

标签: javascript jquery html node.js cheerio

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

使用

$( $('.description')[0] ).children().not('h2').html()

似乎只抓取文字

Foo Bar

而不是

<p>Foo</p> 
<p>Bar</p>

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>

4 个答案:

答案 0 :(得分:4)

如果您解构jQuery语句,则会得到以下结果:

$('.description')[0]

将首先返回第一个<div>节点。

$( $('.description')[0] ).children()

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

$( $('.description')[0] ).children().not('h2')

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

$( $('.description')[0] ).children().not('h2').html()

.html()应用于每个节点,即提取节点内的所有html。 <p>Foo</p>Foo

这就是你要找的东西:

$( $('.description')[0] ).children().not('h2').prop('outerHTML')
基于Cheerio docs

更新:您需要这样做:

  

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

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

$( $('.description')[0] ).children().not('h2').html('p')

答案 1 :(得分:0)

如果您以后不需要访问h2,则可以创建重复元素并删除您不想要的所有内容,或者删除原始内容。

var dup = $(".description").clone();
dup.children("h2").remove();
var out = dup.html();

答案 2 :(得分:0)

更新:

根据文档,您可以尝试以下方法:

$.html($('.description:first').children(':not(h2)'));

答案 3 :(得分:0)

您可以在jQuery中使用.prop("tagName")的更简洁的方法。