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

如何使用jQuery / Javascript来select第一个<div class="description中的两个<p>元素的HTML?Regex也很好,这个jQuery的select实际上是在一个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> 

如果你解构你的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文档 :你需要这样做:

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

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

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

你可以创build一个重复的元素,并删除你不想要的所有东西,或者如果你以后不需要访问h2 ,就可以在原来的东西上执行它。

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

更新:

根据文档,您可以尝试以下操作:

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

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