单击按钮即可在列表元素之间切换类

时间:2020-06-16 03:48:09

标签: javascript jquery

我需要删除列表元素之间并添加一个类,如果我按了#swapThumb按钮,它应该从当前元素中删除selected类,然后添加到下一个元素。 / p>

这就是我所拥有的

html

<ul id="product-thumbnails" class="thumbnails list-inline">
    <li class="vtmb vt-123 selected" style="">
        <a href="/uno"><img src="https://via.placeholder.com/100x100"></a>
    </li>
    <li class="vtmb vt-456" style="">
        <a href="/dos"><img src="https://via.placeholder.com/100x100"></a>
    </li>
    <li class="vtmb vt-789" style="display: none">
        <a href="/tres"><img src="https://via.placeholder.com/100x100"></a>
    </li>
    <li class="vtmb vt-101" style="">
        <a href="/cuatro"><img src="https://via.placeholder.com/100x100"></a>
    </li>
    <li class="vtmb vt-121" style="display: none">
        <a href="/cinco"><img src="https://via.placeholder.com/100x100"></a>
    </li>
</ul>

<button id="swapThumb">Next</button>

javascript

let thumbsNailsList = $('#product-thumbnails').find('li');
let swapButton = $('#swapThumb');

thumbsNailsList.each((index, item) => {

  let thumbsAvailable = $(item).attr('style');

  if (thumbsAvailable === '') {

    $(swapButton).on('click', () => {
      $(item).removeClass('selected');
      $(item).closest($(item)).next().addClass('selected');
    });
  }
});

首先,我要检查li元素是否具有空的style属性(这是必需的),如果是,则触发点击验证。

单击应从第一个元素中删除selected类,然后将其添加到下一个元素中,依此类推(应与空的style属性匹配)。一旦selected类到达list的最后一个元素,它就应将该类返回到第一个元素。

1 个答案:

答案 0 :(得分:0)

此代码段会将其下面的元素的类别更改为选中,并将其从当前元素中删除,同时保留所有其他类别。如果在最后一个元素上单击next,它也将循环回到开始的元素。我听说jQuery函数比文档函数更昂贵,并且不应该用于这类事情。将其应用于您的问题,您应该会得到预期的结果

let i = 0;
let thumbsNailsList = document.getElementById("product-thumbnails").children;
let btn = document.getElementById("btn");
btn.onclick = function() {
   var prevClasses = thumbsNailsList[i].className;
   thumbsNailsList[i].className = prevClasses.replace("selected", "");
   i = (i+1) % thumbsNailsList.length;
   thumbsNailsList[i].className = "selected";
   console.log(thumbsNailsList);
}
<ul id="product-thumbnails">
  <li class='selected'></li>
  <li class=''></li>
  <li class=''></li>
  <li class=''></li>
</ul>
<button id="btn">Next</button>