0

我尝试使用 Node.js 抓取网页。我只想删除链接内的 div 节点并获取字符串“John Doe”。我在这里做错了什么?

<div class="myclass">
<a href="page.html">
    <div><img src="image.jpg" /></div>
    John doe
</a>
</div>


$('div.myclass a').each(function(i, e) {
    $(e).each(function(i, e) {
        console.log($(e).remove("div").html());
    }
}

此 javascript 代码块返回完全相同的 html 部分(未删除 div)

<div class="myclass">
<a href="page.html">
    <div><img src="image.jpg" /></div>
    John doe
</a>
</div>

谢谢你的帮助 !

4

3 回答 3

0

尝试这个

$('div.myclass a').each(function (i, e) {
    $(e).each(function (i, ex) {
        $(ex).find("div").remove();
        $(ex).html();
    });
});

演示

更简单

$('div.myclass a').each(function (i, e) {
    $(e).find("div").remove();
    $(e).html();
});

演示2

于 2013-10-29T13:34:57.240 回答
0

在您的代码中,问题在于该行$(e).remove("div"),它试图div从匹配的集合中删除一个元素e,但e它是当前anchor元素,因此$(e).remove("div")不会删除任何内容,而是您需要div在当前元素中找到子a元素并将其删除。

即使 html 无效,您也可以删除div

$('div.myclass a').each(function(i, e) {
    $(this).children('div').remove();
    var text = $.trim($(this).text());
    console.log(text)
})

演示:小提琴

于 2013-10-29T13:35:00.523 回答
0

你也能children发挥作用吗

$('div.myclass a').each(function(i, e) {
    $(e).each(function(i, e) {
        console.log($(e).children('div:first').remove(););
    }
}
于 2013-10-29T13:43:01.450 回答