javascript - 获取变异类名的索引

标签 javascript html jquery css observable

我在网页上找到了一个列表。

按下按钮后,系统将类从 listFUTItem has-auction-data 更改为 listFUTItem has-auction-data won

我用mutationobserver观察列表并想要获取更改的类元素的索引。

我根本不知道如何获取索引。

在网页上,您一次只能拥有一个listFUTItem has-auction-data won我不知道如何切换它。但这在这里并不重要。

这是一个演示:

$('.listFUTItem').click(function() {
  $(this).removeClass('listFUTItem has-auction-data');
  $(this).addClass('listFUTItem has-auction-data won');
});

var observerTest = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (mutation.attributeName === "class") {
      var attributeValue = $(mutation.target).prop(mutation.attributeName);
      if (
        attributeValue.includes("won")
      ) {
        console.log(attributeValue.index);
      }
    }
  });
});
observerTest.observe(document.body, {
  attributes: true,
  subtree: true
});
.won {
  background: #00FF00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="paginated">
  <li class="listFUTItem has-auction-data"> Ballack</li>
  <li class="listFUTItem has-auction-data"> Lehmann</li>
  <li class="listFUTItem has-auction-data"> Pique</li>
  <li class="listFUTItem has-auction-data"> Kroos</li>
  <li class="listFUTItem has-auction-data"> Owen</li>
</ul>

最佳答案

使用 jQuery,您可以使用 $(mutation.target).index()

$('.listFUTItem').click(function() {
  $(this).addClass('won');
});

var observerTest = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    console.log('mutation found');
    if (mutation.attributeName === "class") {
      var attributeValue = $(mutation.target).prop(mutation.attributeName);
      if (attributeValue.includes("won")) {
        console.log($(mutation.target).index());
      }
    }
  });
});

//Changed document.body to document.querySelector('.paginated') so it only observes this element (inclusing the subtree because of the settings), if you want to use jquery you can use $('.paginated').get(0).
observerTest.observe(document.querySelector('.paginated'), {
  attributes: true,
  subtree: true
});

//Try to mimic the time problem as mentioned in the comments, howver it does not seem to trigger the mutation observer which makes sense since you are listening to attribute changes only.
window.setInterval(() => { document.querySelectorAll('.time').forEach(e => e.innerText = parseInt(e.innerText) + 1)}, 1000)
.won {
  background: #00FF00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="paginated">
  <li class="listFUTItem has-auction-data"> Ballack <span class=time>0<span>s</li>
  <li class="listFUTItem has-auction-data"> Lehmann <span class=time>0<span>s</li>
  <li class="listFUTItem has-auction-data"> Pique <span class=time>0<span>s</li>
  <li class="listFUTItem has-auction-data"> Kroos <span class=time>0<span>s</li>
  <li class="listFUTItem has-auction-data"> Owen <span class=time>0<span>s</li>
</ul>

关于javascript - 获取变异类名的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61796787/

相关文章:

HTML5 中的 Javascript - 需要多次 sleep() 才能显示步骤

jquery - 我如何通过 jquery 和 ajax 替换图像(在 div 内)

javascript - 我的 javascript 错误在哪里?转换日期格式

javascript - 使用 Jquery 输出 XML 代码

javascript - jQuery 脚本仅在第二个事件上执行

javascript - Bootstrap 模式是否显示取决于 bootstrap 版本

javascript - 将 json 转换为嵌套的 JavaScript 对象

javascript - 获取 InDesign 多页文档的当前页码

javascript - SEQUELIZE 插入行时不会自动递增 id?

html - 下拉菜单中的文字应该是绿色而不是红色