如何将jQuery通配符与removeClass一起使用

时间:2016-09-19 16:41:46

标签: javascript jquery

我正在尝试使用以下jquery代码修改具有给定类的div:

$("[class^=delay-][class$='+number+']").each(function(index) {
    var delayTime = $(this).attr('class').match(/delay-(\d+)/)[1];
    $(this).removeClass("[class^=delay-][class$='+number+']");
    $(this).data('data-wow-delay', delayTime + 's');
});
  1. 找到有延迟-1或延迟-3的div,依此类推......
  2. 将数字作为变量。
  3. 删除课程,因为我不再需要它了。
  4. 添加到div数据-wow-delay =" 1s"
  5. 我正在使用上面的脚本,但它似乎没有成功识别该类。

1 个答案:

答案 0 :(得分:2)

  

jquery通配符不适用于removeClass

这是正确的,因为removeClass不使用选择器,它使用显式类名 - 它直接等同于addClass,为此没有通配符。

您可以获取所有类并循环遍历它们,为remove类提供精确值,并在您的情况下为delayTime值。

// match where all the classes might contain a relevant one
$("[class*='delay-']").each(function() {

  // Keep 'this' for inside later loop
  var el = $(this);

  // get all the classes
  var classList = el.attr('class').split(/\s+/);

  // loop each class to check if it's one to remove
  $.each(classList, function(index, item) {
    if (item.startsWith("delay-")) {
      el.removeClass(item);
      var delayTime = parseInt(item.substring(6), 10);
      el.data('data-wow-delay', delayTime + 's');
    }
  });
});

您可以使用$.map减少代码,但这可以提供这个想法。

工作小提琴:https://jsfiddle.net/hne72o8m/