如何使用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>
答案 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")
的更简洁的方法。