jQuery获取以某个类名开头的所有类名

3
我有以下的HTML代码:

我有以下的HTML

<button class="c1 c2 user-1"></button>
<button class="c1 c2 user-2"></button>
<button class="c1 c2 user-3"></button>

我知道哪个按钮被点击了,如何从中获取user-#类?


@guradio 获取元素,而不是类名。 - Rory McCrossan
这个类会被打乱吗?你可以获取属性类,使用空格分割它,然后弹出获取最后一个元素,即你想要的类。 - guradio
使用$('button').click(function(){ $(this).attr('class'); });。 - Amit Kumar
5个回答

4

一种方法是使用正则表达式来拆分class属性值,类似于以下内容:

$('button').click(function() {
  var classes = $(this).attr('class');
  var userClass = classes.match(/user\-\d+/gi)[0];
  console.log(userClass);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="c1 c2 user-1"></button>
<button class="c1 c2 user-2"></button>
<button class="c1 c2 user-3"></button>
<button class="c1 c2 user-111 foo1"></button>

然而,一种更加可扩展、灵活和可靠的解决方案是将 user-X 值存储在元素的 data 属性中:

$('button').click(function() {
  var user = $(this).data('user');
  console.log(user);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="c1 c2" data-user="user-1"></button>
<button class="c1 c2" data-user="user-2"></button>
<button class="c1 c2" data-user="user-3"></button>


1
假设类别像OP中那样,您可以获取属性类别,使用空格分割它,然后弹出获取最后一个元素,即您想要的类别。

$("button").click(function() {

  var thisclass = $(this).attr("class")

  alert(thisclass.split(" ").pop())

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="c1 c2 user-1">1</button>
<button class="c1 c2 user-2">2</button>
<button class="c1 c2 user-3">3</button>


1
请注意,如果OP在不记得JS与元素紧密绑定的情况下向元素添加另一个类,则此代码很容易被破坏。 - Rory McCrossan

1
你可以获取被点击的 class 属性,并使用类似以下的正则表达式:
.replace(/.*(user-\d+).*/g,'$1')

要从中获取用户编号 - 请参见下面的演示:

$('button').click(function(){
  console.log($(this).attr('class').replace(/.*(user-\d+).*/g,'$1'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="c1 c2 user-1">one</button>
<button class="c1 c2 user-2">two</button>
<button class="c1 c2 user-3">three</button>
<button class="user-45 c1 c2">four</button>


0

这应该可以工作:

function getUser(list) {
  
  return list
    .reduce((res, classname) => {
      const re = /user-(\w+)$/;
      const user = re.exec(classname);
      if(user) {
        res.push(user[1]);
      }
      
      return res;
    }, [])
  ;
}

function onButtonsClick(event) {
  const classes = Array.from(event.target.classList);
  
  console.log(getUser(classes));
}

Array
  .prototype
  .forEach
  .call(document.querySelectorAll('button'), element => {
    element.addEventListener('click', onButtonsClick);
  })
;
<button class="c1 c2 user-1">User 1</button>
<button class="c1 c2 user-2">User 2</button>
<button class="c1 c2 user-3">User 3</button>


0

这里提供一个解决方案

$('button').click(function(){
  var allClass = $(this).attr('class').split(' ');
  console.log(allClass[allClass.length - 1]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="c1 c2 user-1"></button>
<button class="c1 c2 user-2"></button>
<button class="c1 c2 user-3"></button>

使用.attr('class')获取点击按钮的所有类。 然后根据空格拆分并从数组中获取最后一个元素。

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接