JQuery.wrap() не работает

Я, вероятно, что-то делаю неправильно, но я пробовал всевозможные вещи и, похоже, не собираю коллекцию объектов jQuery, завернутых. Следующий результат выводит ссылку HTML, развернутую. Любые идеи?

$.each(sitemapSections, function(i) {
  var $sitemapSection = $(sitemapSections[i]);
  var $primary = $sitemapSection.find('a[data-level="1"]').wrap('<h3></h3>');

  $dropdownSections[i].html($primary);
});

EDIT - здесь разметка (очистка):

<li id="product-solutions"><a href="#link" class="alpha grid-6">Products &amp; Solutions</a>

  <div id="ps-dropdown" class="dropdown-menu grid-20">
    <div class="ps-dropdown-section">

    </div><!-- .ps-dropdown-section -->

    <div class="ps-dropdown-section">

    </div><!-- .ps-dropdown-section -->

    <div class="ps-dropdown-section">

    </div><!-- .ps-dropdown-section -->
  </div><!-- .dropdown-menu -->
</li>

ОБНОВЛЕНИЕ - Я понял! Комментарии, которые упомянули parent(), - это то, что мне не хватало. Здесь последний код:

$.each(sitemapSections, function(i) {
  var $sitemapSection = $(sitemapSections[i]);
  var $primary = $sitemapSection.find('a[data-level="1"]').wrap('<h3></h3>').parent();

  $dropdownSections[i].html($primary);
});

Ответ 1

jquery.wrap() возвращает элемент INNER к вам, поэтому он не выглядит как ничего.

$("<div>").wrap('<span>') 

===> 

[<div></div>]

который выглядит так, как будто он не работает.

но

$("<div>").wrap('<span>').parent()

===>

[<span><div></div></span>]

он действительно работал.

Ответ 2

Похоже, вы хотите использовать jQuery html метод для добавления html во второй в последнюю строку - если $dropdownSections не является массивом, каждый элемент которого является объектом jQuery. Я думаю, вы могли бы после этого:

$.each(sitemapSections, function(i) {
  var $sitemapSection = $(sitemapSections[i]);
  var $primary = $sitemapSection.find('[data-level="1"]').wrap('<h3></h3>');

  $dropdownSections.eq(i).html($primary.parent().html());
});

или более иначе:

$.each(sitemapSections, function(i) {
  $dropdownSections.eq(i).html(
    $(sitemapSections[i])
    .find('[data-level="1"]')
    .wrap('<h3></h3>')
    .parent()
    .html()
  );
});

if $dropdownSections - это массив, который имеет объект jQuery в каждом элементе:

$.each(sitemapSections, function(i) {
  $dropdownSections[i].html(
    $(sitemapSections[i])
    .find('[data-level="1"]')
    .wrap('<h3></h3>')
    .parent()
    .html()
  );
});

Ответ 3

Вам нужна строка для перехода в .html(), я думаю, что вы после этого:

 $dropdownSections[i].empty().append($primary.parent());

Это получает .parent() (так как вы просто завернули его в один) и устанавливает для него содержимое.