检查元素是否包含带有classList的正则表达式的类

Ser*_*rov 5 html javascript dom

我有一个简单的元素列表,如下所示:

<ul class="items-list">
  <li class="item item-1"></li>
  <li class="item item-2"></li>
  <li class="item item-3"></li>
  <li class="item item-4"></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我选择列表

items = document.getElementsByClassName('items-list')[0]
Run Code Online (Sandbox Code Playgroud)

最后在for..in循环中我想提取类名'item-*'.因为我想在没有jQuery或其他库的情况下制作它,我想知道如何以最优雅的方式做到这一点,比如说

if (item.classList.contains('item-.*'))
  do_something()
Run Code Online (Sandbox Code Playgroud)

请指教.

Ori*_*iol 9

您可以检查some(ES5)类是否与您的regExp匹配:

if(item.className.split(' ').some(function(c){ return /item-.*/.test(c); }))
  do_something()
/* or */
if([].some.call(item.classList, function(c){ return /item-.*/.test(c); }))
  do_something()
Run Code Online (Sandbox Code Playgroud)

或者,在ES6中,使用箭头功能,您可以简化为

if(item.className.split(' ').some(c => /item-.*/.test(c)))
  do_something()
/* or */
if([].some.call(item.classList, c => /item-.*/.test(c)))
  do_something()
Run Code Online (Sandbox Code Playgroud)

但是,当然,如果您想获得最大性能,请使用循环:

for (var i=0, l=item.classList.length; i<l; ++i) {
    if(/item-.*/.test(item.classList[i])) {
        do_something();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)


Zuh*_*aha 5

您可以使用正则表达式来测试 className 是否包含item-

if (/item-/.test(item.className)) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)