Убрать определенный тег из родительского (jQuery) - PullRequest
1 голос
/ 28 января 2010

HTML:

<div class="featured">
    <h4><a href="#">Title 1</a></h4>
    <a href="#"><img src="image.png" class="image"/></a>
    <p><a href="#"></a><br />
    Description goes here</p>
</div>

<div class="featured">
    <h4><a href="#">Title 2</a></h4>
    <a href="#"><img src="image.png" class="image"/></a>
    <p><a href="#"></a></p>
    <p>Description goes here</p>
</div>

.. Как удалить все теги <p> из .featured?

Спасибо

Ответы [ 5 ]

2 голосов
/ 28 января 2010

Выезд Развертывание Бена Алмана "плагин"

$.fn.unwrap = function() {
  this.parent(':not(body)')
    .each(function(){
      $(this).replaceWith( this.childNodes );
    });

  return this;
};

ваше использование будет:

* +1007 *
2 голосов
/ 28 января 2010

Это работает, но только потому, что ваши элементы абзаца находятся в конце ваших div:

$(".featured p").each(function(){
    var content = $(this).html();
    $(this).parent().append(content);
    $(this).remove();
});
1 голос
/ 28 января 2010

С помощью jQuery 1.4 вы можете сделать это следующим образом:

$(".featured p *").unwrap();
$(".featured p").each(function(){
  $(this).replaceWith("<span>"+ $(this).text() + "</span>")
});

Проверьте это здесь

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

1 голос
/ 28 января 2010

Как то так?

$(".featured p").each(
  function(){
    $(this).after($(this).html()).remove();
});

Редактировать 2: Проверено, работает. красиво и просто.

1 голос
/ 28 января 2010
$(".featured p").remove();

Это работает, изменяя каждый <p> на <span>. Он делает это на месте, поэтому <p> s не обязательно должны быть в конце (без добавления - это не будет изменять порядок элементов):

$(".featured p").replaceWith(function(){
     return $('<span />').html( $(this).html() );
});

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

...