Как удалить только тег с помощью jQuery?

Я хочу удалить span с помощью jQuery, Я пробовал .unwrap();, но он не работает.

<div>
<ul>
<li><a href="#"><span>link</span></a></li>
<li><a href="#"><span>link</span></a></li>
</ul>
</div>

Ответ 1

Очевидно, что unwrap не работает, так как span содержит только текстовые узлы, а jquery слишком плохо обрабатывает текстовые узлы... это работает (вы можете использовать также jQuery.text вместо jQuery.html, если вы уверены, что span содержит только текст):

$('li a span').replaceWith($('li a span').html());

Рабочий пример

Изменить. На самом деле кажется, что unwrap работает, если вы используете jQuery.contents для работы вокруг jQuery невозможность прямого выбора текстовых узлов:

$('li a span').contents().unwrap();

Ответ 2

$('li').find('span').remove();

или

$('li').find('span').detach();

Если вы хотите удалить только упаковку, попробуйте

var buffer = $('li').find('span').text();
$('li').find('span').parent().html(buffer);

Ответ 3

Unwrap должен работать. Возможно, вы не выбрали диапазон, который хотите развернуть. Вы можете попробовать следующий код, который должен успешно выбрать этот диапазон:

$("li a span").unwrap()

С вашего вопроса немного непонятно, что именно вы пытаетесь сделать. Также неясно, есть ли у вас проблемы с селекторами или с jQuery api. Чтобы получить лучший дескриптор селекторов jquery, я рекомендую установить firebug и firequery, так как это действительно поможет вам понять, что вы выбираете.

Ответ 4

$("span").each(function() {
    var content = $(this).text();
    $(this).remove();
    $("a").html(content);
});