Как мне развернуть всех родителей с помощью jQuery?

#jquery

#jquery

Вопрос:

 <p><span><a href="link"></a></span></p>
  

Как бы я развернул все, оставив только <a href="link"></a> ?

-редактировать-

Извините, я должен был предоставить больше информации. В принципе, я пытаюсь настроить таргетинг на все a , которые являются единственными дочерними span элементами, которые окружены p тегами. Я надеялся, что следующее поможет, но это только развернуло p теги. Мне было интересно, есть ли способ удалить span теги также.

$('p > span:only-child > a:only-child').unwrap();

Комментарии:

1. Под «unwrap» вы имеете в виду, что хотите удалить теги p и span из DOM, оставив a там?

Ответ №1:

Это сделало бы это:

 $(document).ready(function() {
    var link = $("a").detach();
    $("p").remove();
    link.appendTo("body");
});
  

Отсоединяет ссылку от DOM и откладывает ее в link var. Полностью удаляет p из DOM. Повторно прикрепляет a к body тегу.

Чтобы вернуть ссылку точно туда, где она есть, добавьте ее к родительскому p элементу, не обязательно к body элементу. Итак, допустим, у вас есть это:

 <div id="foo">
<p><span><a href="link"></a></span></p>
</div>
  

Вместо этого вы бы использовали эту строку:

 link.appendTo("#foo");
  

Редактировать в ответ на вашу правку:

Да, unwrap выполняет только один родительский уровень (насколько я знаю). Так что просто сделайте это два раза. 🙂

 $('p > span:only-child > a:only-child').unwrap().unwrap();
  

Комментарии:

1. @Steve, я бы использовал это вместо.

2. Спасибо тебе, Джефф. Просто для ясности, и поскольку я понял, насколько простым и неинформативным был мой первоначальный пост, я добавил немного больше информации, чтобы точно отразить то, что я хочу сделать. Ваш ответ все еще применим?

3. Это все равно должно применяться, если вы знаете, к какому элементу повторно прикрепить ссылку — это ключ. Сначала я не думал, что unwrap() это сработает, поскольку это разворачивает только один уровень, но потом я понял, что вы могли бы просто вызвать это дважды. Первый, чтобы удалить span , второй, чтобы удалить p .

Ответ №2:

Вы не предоставили достаточно информации о других элементах на странице. Следующее просто для начала.

 var theLink = $("span").html();
$("p").remove();
$("body").html(theLink);
  

Комментарии:

1. Спасибо вам за то, что указали на это. Я предоставил больше информации в своем первоначальном посте.