Фильтруйте HTML-контент с помощью JQuery, но исключайте определенные элементы - PullRequest
0 голосов
/ 21 октября 2011

У меня есть список сообщений, и я хотел бы удалить все текстовое / HTML-содержимое, кроме набора "strong".

Оригинал

<li id="post">
    <p>
        <strong>Reality</strong>
    </p>
    <p>
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
    </p>
</li>
<li id="post">
    <p>
        <strong>Buzz</strong><br>
        <br>
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
    </p>
</li>
<li id="post">
    <p>
        <strong>Innovation</strong><br>
        <br>
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
    </p>
</li> 

Желаемый результат

<li id="post">
        Reality
</li>
<li id="post">
        Buzz
</li>
<li id="post">
        Innovation
</li>

Как я могу сделать это с помощью JQuery?

Ответы [ 6 ]

1 голос
/ 21 октября 2011

Код ниже работает как задумано. Заменить id="post" на class="post" !!

Скрипка: http://jsfiddle.net/GfsCB/

$("li.post").each(function(){
    var filtered = $("<li>").append($("strong", this).text())
    $(this).replaceWith(filtered);
});
  1. Цикл каждого элемента <li>.
  2. Создайте новый элемент <li> и добавьте текстовое содержимое всех элементов <strong>
  3. Заменить текущий выбранный элемент <li> только что созданным элементом <li> (filtered).
0 голосов
/ 21 октября 2011

Мое решение состоит в том, чтобы сделать селектор, который выбирает все сильные $ («сильный»), затем удаляет все li и затем .each элемент в $ («сильный»), добавляя его в новый li.


Обновление:

Вы можете попробовать это: http://jsfiddle.net/6awfe/

$("li#post").each( function()
    {
        $(this).html("[strong start tag]" + $("strong", this).html()+"[strong end tag]");
    } )
0 голосов
/ 21 октября 2011

Если вы собираетесь изменить id='post' на class='post' (id s должен быть уникальным):

$("li.post").each(function() {
   $(this).text($(this).find("strong").text());
});

При этом сохраняются все атрибуты, связанные с элементом списка, и заменяется только содержимое.

Демо: http://jsfiddle.net/BRnZh/

0 голосов
/ 21 октября 2011
$('.post').each(function(){
    $(this).html($('strong', this).text());
});

Измените id = "post" на class = "post", как утверждают и другие.

0 голосов
/ 21 октября 2011

Это должно помочь вам:

var htmlText = "";
$('.post').find('strong').each(function() {
    htmlText += "<li class=\"post\">" + $(this).text() + "</li>";
});

alert(htmlText);
0 голосов
/ 21 октября 2011

Мое решение состоит в том, чтобы сделать селектор, который выбирает все сильные $ («сильный»), затем удаляет все li и затем .each элемент в $ («сильный»), добавляя его в новый li.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...