jQuery .wrap()不起作用

时间:2010-08-25 20:24:58

标签: jquery

我可能做错了但是我已经尝试了各种各样的东西,似乎无法获得包装的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);
});

编辑 - 这是标记(清理):

<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);
});

2 个答案:

答案 0 :(得分:1)

看起来你的意思是使用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()
  );
});

如果$ dropdownSections是一个在每个元素中都有一个jQuery对象的数组:

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

答案 1 :(得分:0)

你需要一个字符串传递给.html(),我想你是在这之后:

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

这会得到.parent()(因为你只是把它包装成一个)并将内容设置为。