Получение HTML из div, исключая другие div с помощью jQuery - PullRequest
2 голосов
/ 15 ноября 2010

Нам нужно очистить основную часть статей блогов для нашей системы (я клянусь, это законно - у нас есть обучающий блог, и мы хотим отображать содержимое в диалоговых окнах помощи внутри системы).Блоги написаны на сторонней платформе, которая производит HTML следующим образом:

<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>

Я пытаюсь получить весь HTML-контент внутри поста div, но исключая заголовок, подпись, материалы, кнопки,и теги разделов.

Если я запускаю этот jQuery:

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

, я получаю обратно все содержимое поста div, включая нежелательные заголовки / div.Я пробовал разные заклинания не, в том числе: нет, и гуглил, пока мои глаза не болели, безрезультатно.

Есть идеи?Кажется, это должно быть довольно легко, так что я предполагаю, что что-то упустил?Спасибо!

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Вы используете селекторы неправильно.Как только он находит $ (". Post"), он не заглядывает внутрь, чтобы исключить содержимое этого div.$ (". post") соответствует селектору точно, не будучи заголовком, подписью, представлениями, до бесконечности.

Я предлагаю вам удалить эти другие классы, а затем взять html () или .post.

Имеет смысл?

РЕДАКТИРОВАТЬ: (Пожалуйста, не голосуйте, не попробовав мой метод ... это не здорово, но это работает)

$(".title").remove();
$(".byline").remove();
$(".submissions").remove();
$(".buttons").remove();
$(".tags").remove();
alert($(".post").html());
2 голосов
/ 15 ноября 2010

Попробуйте использовать метод поиска с: не так

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

Сезон по вкусу.

Другой вариант - просто скрыть ненужные элементы:

$('div.post').find('.title, .byline, .submissions, .buttons, .tags').hide();
1 голос
/ 15 ноября 2010

Вы должны быть в состоянии изолировать этот текст, используя метод children() с селектором :not

$(".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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...