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 & 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()
(так как вы просто завернули его в один) и устанавливает для него содержимое.