无法使用 jquery 正确向上遍历

Cant traverse up correctly with jquery

我想简单地向上遍历找到父元素并用 a 包围它。

这是我目前拥有的:

$(".product_thumbnail a").each(function() {
    var hrefsrc = $(this).attr('href');
    console.log(hrefsrc);

    $(this).parent('.animate').wrap('<a href="'+hrefsrc+'"></a>');
});

这是 HTML 结构:

<ul id="someIDs">
<li class="animate">
    <div class="product_thumbnail_wrapper ">
        <div class="product_thumbnail ">
            <a href="url">
                <span class="product_thumbnail_background" style=""></span>
                <img width="300" height="300" src="url" />
            </a>
        </div>
</li>
</ul>

无法弄清楚如何正确触发正确的元素。 我尝试了以下方法:

closest()

parent()

parents()

parentsUntil 表明包装是可能的。 我还阅读了 jQUery 遍历文档,但这并没有多大帮助。

感谢您的帮助!

因为 li.animate 元素不是 a 元素的直接 parent 你不能使用 parent 而你需要使用 parents 函数,但是 - 并不是说​​它会给你 DOM 树上的所有 parent。

如果你没有超过 1 个,应该没问题,但如果你有,它将无法正常工作。

这是对您的代码的修复,但您应该真正更改它,以便最终输出成为有效的 HTML 结构。

$(".product_thumbnail a").each(function() {
    var hrefsrc = $(this).attr('href');
    $(this).parents('.animate').wrap('<a href="'+hrefsrc+'"></a>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="someIDs">
  <li class="animate">
      <div class="product_thumbnail_wrapper ">
          <div class="product_thumbnail ">
              <a href="url">
                  <span class="product_thumbnail_background" style=""></span>
                  <img width="300" height="300" src="url" />
              </a>
          </div>
      </div>
  </li>
</ul>

Also important - note that <a> is an inline-block element and should not wrap blocking elements (such as <div>). Another issue is that <ul> elements should only have <li> child-elements (And not <a> - like what you are doing).

您可以做的是将 <a> 元素更改为 li 上的 onclick 函数:

$(".product_thumbnail a").each(function() {
    var hrefsrc = $(this).attr('href');
    $(this).parents('.animate').click(function() {
      window.location = hrefsrc;
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="someIDs">
  <li class="animate">
      <div class="product_thumbnail_wrapper ">
          <div class="product_thumbnail ">
              <a href="url">
                  <span class="product_thumbnail_background" style=""></span>
                  <img width="300" height="300" src="url" />
              </a>
          </div>
      </div>
  </li>
</ul>

它将以同样的方式工作,结构现在有效。