Javascript 确定jQuery中的$(this)元素是否具有类似字符串的类
在jqueryeach循环中,我如何确定所选$(this)元素是否包含一个名为“like”的类和一个特定值。起初hasClass()看起来很有希望,但我不清楚如何使用该函数来处理这个问题 这是标记Javascript 确定jQuery中的$(this)元素是否具有类似字符串的类,javascript,jquery,Javascript,Jquery,在jqueryeach循环中,我如何确定所选$(this)元素是否包含一个名为“like”的类和一个特定值。起初hasClass()看起来很有希望,但我不清楚如何使用该函数来处理这个问题 这是标记 <div class="command_buttons"> <a class="download_left_button" style="display:none;" href="#"></a> <a class="bookmark_left_
<div class="command_buttons">
<a class="download_left_button" style="display:none;" href="#"></a>
<a class="bookmark_left_button" href="#"></a>
<a class="search_right_button" href="#"></a>
</div>
例如,使用上面的函数,如果我们将'bookmark'传递给buttonType参数,那么它需要定位具有'bookmark\u left\u button'类的锚定标记
我们有各种各样的按钮,可以出现在不同的位置。因此,我更喜欢查找“bookmark”,而不是为我们可以应用于按钮(即bookmark\u left\u按钮、bookmark\u center\u按钮、bookmark\u right\u按钮、download\u left\u按钮等)的所有类排列编写选择
感谢您的帮助。只需执行以下操作即可:
if ($(this).hasClass(buttonType)) {
因此:
你想做一个部分匹配。这表明您的类名设置不正确
如果您有以下课程:
.bookmark-item {}
.bookmark-header {}
.search-item {}
.search-header {}
您希望匹配所有bookmark-*
元素,您应该将类重新组织为:
.bookmark.item {}
.bookmark.header {}
.search.item {}
.search.header {}
/* ^- note that there is no space here */
您的html将是:
这允许您将类与.hasClass(“书签”)
如果您不清楚CSS语法:
.bookmark .item {}
匹配项:
<div class="bookmark"><div class="item"></div></div>
<div class="bookmark item"></div>
匹配项:
<div class="bookmark"><div class="item"></div></div>
<div class="bookmark item"></div>
当使用
each()
在元素上循环时,函数回调使用两个变量:索引
,一个随每次传递而递增的数字,和值
,实际节点本身;所以您需要引用值
$($visibleButtons).each(function (index, value) {
if ($(value).hasClass(buttonType)) {
alert('true: ' + index);
} else {
alert('false: ' + index);
}
});
试试这个
buttonSelector = buttonType + '_';
$($visibleButtons).each(function (index) {
if ($(this).attr("class").search(buttonSelector) != -1) {
alert('true: ' + index);
} else {
alert('false: ' + index);
}
});
它只是在
类
属性中进行字符串搜索,以查看是否存在按钮类型。$(值)
值
是dom节点。另外,buttonSelector
包含的类名不止一个,这才是真正的问题。很好的一点,我没注意到。我已经相应地更新了我的帖子。你已经回复了一半的评论,但是buttonType仍然不是完整的类名,hasClass
真的在这里工作吗?@Kevin B,我最初代码中的buttonSelector是我的第一次尝试。我认为Archer的想法是正确的,只是把它改为buttonSelector=buttonType+“”;更清楚的是,这些警报只是为了分类,一旦能够确定$(this)按钮是否有一个“buttonType*”类,该函数实际上将执行其他操作。奇怪的是,有一种方法可以通过$(element[class*=foo])或$(element[class^=foo])对选择器进行通配符,但是没有一套类似的jQuery函数可以像.hasClass()函数那样调用。总是使用像这样特定的JSFIDLE代码。您能将HTML更改为添加“bookmark”作为附加类吗?例如class=“书签书签”左按钮“
。或者,如果您有单独的书签,您可能会使您的左右按钮代码更通用。。。乍一看,这似乎是一个更好的选择……我同意@Chris-如果可能的话,这是一种更简单的方法。@Chris,我同意,添加一个单独的“bookmark”类会使这更容易处理。现在,我们正在尝试热修复另一个开发人员将在下一个sprint中重新考虑的问题。我会向她建议这个。我们当前的问题是,命令栏标记在整个web项目的许多地方,因此通过添加该类来简化会带来额外的风险,我现在正试图避免这种风险。但这不是因为它没有一个名为bookmark
的类,这就是为什么它不起作用的原因。或者你是说hasClass
自动检查类的子字符串,这对我来说似乎是错误的(不查API)。哦,我明白了。我误解了这个问题。我猜想他有一个叫做bookmark
的课程。OP正在尝试进行部分匹配,这向我表明他的类设置不正确。没有理由不拆分一个类名。@Frits van Campen,我听到了。这是我们可以在下一个sprint中解决的一个更重要的因素。现在我只是想为今天的另一个开发者修复一些东西。从我所看到的,hasClass()没有一个相关的hasClassLike()可以以选择器[class*=foo]可以执行的方式对类搜索进行通配符。回到最初的问题,有没有一种方法可以在一个each循环中完成我所要求的任务?当hasClass
完全足够且更干净时,没有理由使用attr()
。@DesertIvy使用通配符hasClass
,因为这就是问题所在。@Archer,就是这样!感谢所有帮助过这件事的人。
buttonSelector = buttonType + '_';
$($visibleButtons).each(function (index) {
if ($(this).attr("class").search(buttonSelector) != -1) {
alert('true: ' + index);
} else {
alert('false: ' + index);
}
});