无法正确包装元素锚标记

时间:2019-11-15 21:11:22

标签: javascript jquery

我正在尝试使用同时也是其父级的子元素的“ a​​”元素包装svg,但是循环无法正常工作,因为所有svg都被第一个链接包装。我不知道为什么会这样。谢谢!

我会链接将其变为:

<li>
    Topic 1
    <svg></svg>
    <a href="link1"> </a>
</li>

进入此

<li>
   <a href="link1">
     Topic 1
     <svg></svg>
   </a>
</li>

$(document).ready(function () {

     $("ul").each(function(){

          var link =  $(this).find('a').attr('href');
	  $(this).find('svg').wrap("<a href=" + link + "></a>");

     });
	
});	
ul{
  display: flex;
}
ul li{
 width: 90px;
 list-style: none;
}
ul li:hover{
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
    <ul>
        <li>
            Topic 1
            <svg></svg>
            <a href="link1"> </a>
        </li>
        <li>
            Topic 2
            <svg></svg>
            <a href="link2"></a>
        </li>
        <li>
            Topic 3
            <svg></svg>
            <a href="link3"></a>
        </li>
        <li>
            Topic4
            <svg></svg>
            <a href="link4"></a>
        </li>
    </ul>
</body>

2 个答案:

答案 0 :(得分:1)

.each()而非<li>上带有<ul>的循环:

$(document).ready(function() {
  $("li").each(function() {
    var link = $(this).find('a').attr('href');
    $(this).find('svg').wrap("<a href=" + link + "></a>");

  });
});
ul {
  display: flex;
}

ul li {
  width: 90px;
  list-style: none;
}

ul li:hover {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

  <ul>
    <li>
      Topic 1
      <svg></svg>
      <a href="link1"> </a>
    </li>
    <li>
      Topic 2
      <svg></svg>
      <a href="link2"></a>
    </li>
    <li>
      Topic 3
      <svg></svg>
      <a href="link3"></a>
    </li>
    <li>
      Topic4
      <svg></svg>
      <a href="link4"></a>
    </li>
  </ul>

答案 1 :(得分:1)

尝试循环遍历“ ul”中的每个“ li”;

$(document).ready(function () {

     $("ul li").each(function(){

          var link =  $(this).find('a').attr('href');
      $(this).find('svg').wrap("<a href=" + link + "></a>");

     });

});