Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定jQuery中的$(this)元素是否具有类似字符串的类_Javascript_Jquery - Fatal编程技术网

Javascript 确定jQuery中的$(this)元素是否具有类似字符串的类

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_

在jqueryeach循环中,我如何确定所选$(this)元素是否包含一个名为“like”的类和一个特定值。起初hasClass()看起来很有希望,但我不清楚如何使用该函数来处理这个问题

这是标记

<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);
    }
});