通过使用 jQuery 排除其他 div 来从 div 获取 HTML

发布于 2024-10-02 22:24:54 字数 972 浏览 6 评论 0 原文

我们需要为我们的系统抓取博客文章的正文(这是合法的,我发誓 - 我们有一个培训博客,我们希望在系统内的帮助对话框中显示内容)。这些博客是在生成 HTML 的第 3 方平台上编写的,如下所示:

<div class="post">
    <h3 class="title">Title content</h3>

    <div class="byline">
        Byline content
    </div>

    <div class="submissions">
        Submission content
    </div>

    <div class="buttons">
    </div>

    <p>Post body part 1</p>
    some more post body not in a tag, however the user enters it
    <p>Even more post body</p>

    <div class="tags">
        Tag content
    </div>      
</div>

我试图获取帖子 div 内的所有 HTML 内容,但不包括标题、署名、提交内容、按钮和标签部分。

如果我运行这个 jQuery:

$(".post").not(".title").not(".byline").not(".submissions").not(".buttons").not(".tags").html()

我会返回 post div 的全部内容,包括不需要的标题/div。我尝试过各种“不”的咒语,包括:“不”,以及谷歌搜索,直到我的眼睛受伤,但无济于事。

有什么想法吗?看起来应该很简单,所以我猜我错过了一些东西?谢谢!

We need to scrape the body of blog articles for our system (it's legit, I swear - we have a training blog and we want to display the content in help dialogs inside the system). The blogs are written on a 3rd party platform that produces HTML like so:

<div class="post">
    <h3 class="title">Title content</h3>

    <div class="byline">
        Byline content
    </div>

    <div class="submissions">
        Submission content
    </div>

    <div class="buttons">
    </div>

    <p>Post body part 1</p>
    some more post body not in a tag, however the user enters it
    <p>Even more post body</p>

    <div class="tags">
        Tag content
    </div>      
</div>

I'm trying to get all the HTML content inside the post div, but excluding the title, byline, submissions, buttons, and tags sections.

If I run this jQuery:

$(".post").not(".title").not(".byline").not(".submissions").not(".buttons").not(".tags").html()

I get back the entire content of the post div, including the unwanted headers/divs. I've tried various incantations of not, including :not, and Googling until my eyes hurt, to no avail.

Any ideas? Seems like it should be pretty easy, so I'm guessing I'm missing something? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

合约呢 2024-10-09 22:24:54

尝试使用 find 方法和 :not like so

$('div.post').find(":not(.title,.byline,.submissions,.buttons,.tags)");

调味。

另一种选择是隐藏不需要的元素:

$('div.post').find('.title, .byline, .submissions, .buttons, .tags').hide();

Try using the find method with :not like so

$('div.post').find(":not(.title,.byline,.submissions,.buttons,.tags)");

Season to taste.

The other option is to just hide the unwanted elements:

$('div.post').find('.title, .byline, .submissions, .buttons, .tags').hide();
悲凉≈ 2024-10-09 22:24:54

您错误地使用了选择器。一旦找到 $(".post"),它就不会查找内部以排除该 div 的内容。 $(".post") 与选择器精确匹配,不是标题、署名、提交内容、无穷无尽。

我建议您以删除其他类为目标,然后获取 html() 或 .post。

有道理吗?

编辑:(请不要在没有尝试我的方法之前就投票否决我......它不是很好,但它有效)

$(".title").remove();
$(".byline").remove();
$(".submissions").remove();
$(".buttons").remove();
$(".tags").remove();
alert($(".post").html());

You're using selectors incorrectly. Once it finds $(".post"), it will not look inside to exclude the content of that div. $(".post") matches the selector precisely by not being title, byline, submissions, ad infinitum.

I suggest you target those other classes for removal and then grab html() or .post.

Make sense?

EDIT: (Please don't vote me down without trying my method...it isn't great but it works)

$(".title").remove();
$(".byline").remove();
$(".submissions").remove();
$(".buttons").remove();
$(".tags").remove();
alert($(".post").html());
岛歌少女 2024-10-09 22:24:54

您应该能够使用带有 :not 选择器的 children() 方法来隔离该文本

$(".post").children(":not(.title,.byline,.submissions,.buttons,.tags)");

http://api.jquery.com/children/

或者完全隔离您想要的内容,您可以编写:

var $cleansed = $(".post").clone();
$cleansed.find(".title,.byline,.submissions,.buttons,.tags").remove();

// append() or $cleansed.html() this content somewhere

You should be able to isolate that text using the children() method with a :not selector

$(".post").children(":not(.title,.byline,.submissions,.buttons,.tags)");

http://api.jquery.com/children/

or to totally isolate the content you want you could write:

var $cleansed = $(".post").clone();
$cleansed.find(".title,.byline,.submissions,.buttons,.tags").remove();

// append() or $cleansed.html() this content somewhere
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文