JQuery Return class 名称基于部分字符串

JQuery Return class name based on partial string

我有几个 div 的 class 名称表示步骤:

<div class="steps jsStep1 circle">Step 1</div>
<div class="steps jsStep2 circle">Step 2</div>
<div class="steps jsStep3 circle">Step 3</div>

我的 js 是这样连接的:

$(document).on("click", ".steps", function () {
     var selectedStep = $(this).attr('class').match('["jsStep"]')
});

我想要实现的是获得完整的 class 名称,例如 "jsStep3" 如果 div 被点击。我得到的是 ["s"]。 如有任何建议,我们将不胜感激。

你得到 ["s"] 的原因是字符串 '["jsStep"]' 将被转换为正则表达式 /["jsStep"]/ 并且第一个匹配项在所有情况下都是 s


要使其工作,请提供 RegExp object as an argument of String#match 方法。

$(document).on("click", ".steps", function() {
  var selectedStep = $(this).attr('class').match(/jsStep\d+/)[0];
  console.log(selectedStep);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="steps jsStep1 circle">Step 1</div>
<div class="steps jsStep2 circle">Step 2</div>
<div class="steps jsStep3 circle">Step 3</div>


但更好的方法是使用自定义 data-* 属性,它可以通过 data() 方法轻松获得。

$(document).on("click", ".steps", function() {
  var selectedStep = $(this).data('step');
  console.log(selectedStep);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-step="jsStep1" class="steps circle">Step 1</div>
<div data-step="jsStep2" class="steps circle">Step 2</div>
<div data-step="jsStep3" class="steps circle">Step 3</div>