4

我正在尝试做与这个问题类似的事情,但它有点不同,所以那里的解决方案对我不起作用。

<span class="a-class another-class test-top-left"></span>

我有一个元素(此代码显示一个span但它可能是div span或任何东西)。这个元素有一个以test-(test-top-lefttest-top-right) 开头的类。我在以 ( 等) 开头的类上触发了一个点击事件,test-并将点击的对象保存为var object = this;. 到目前为止很简单的东西。

我现在要做的是获取该类的全名(test-top-left)。我知道它的开头,test-但全名是什么。问题是还有其他类a-class another-classtest-top-left. 可以hasClass用来获取类的全名吗?我宁愿不使用find(),或者filter()只是因为其中可能还有其他元素class="test-"

编辑:

我现在拥有的代码是,但它给了我所有的类。我需要的是以test-.

var object = this;
$(object).attr('class'); 

所以现在我 for 循环遍历所有类并分别测试每个类,这似乎是很多不必要的代码。我希望 jQuery 有一个聪明的方法来获取被点击的确切类。

4

3 回答 3

9

描述

您可以使用 jQuerys和Attribute Contains Selector方法。.attr().click()

属性包含选择器- 选择具有指定属性且值包含给定子字符串的元素。

.attr() - 获取匹配元素集中第一个元素的属性值。

.click() - 将事件处理程序绑定到“click”JavaScript 事件,或在元素上触发该事件。

样本

html

<span class="anyclass test-hello">Hello World</span>​

jQuery

$("[class*='test']").click(function() {
    var object = $(this);
    alert(object.attr("class").match(/(test-.*?)(?:\s+|$)/)[1])
;});

查看更新的jsFiddle

更新

如果你不想使用正则表达式,你可以这样做。

$("[class*='test']").click(function() {
    var object = $(this);
    alert("test-" + object.attr("class").split("test-")[1].split("-"))
;});

​</p>

更多信息

于 2012-05-22T19:34:15.450 回答
3

这应该适合你:

var object = this;
var className = object.className.match(/(test-.*?)(?:\s+|$)/)[1];

类名是您要查找的类的名称。

于 2012-05-22T19:46:44.460 回答
0

如果您不想使用拆分或正则表达式,可以尝试将类放在单独的属性中

<span class="someclass test-something" _rel="test-something">test<span> 

或者

<span class="someclass" _rel="test-something">test<span>

用脚本

$("[_rel*='test-']").click(....

并检索属性,使用$(this).attr("_rel")

于 2012-05-22T21:50:36.957 回答