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")
来使用更简洁的方法。