jQuery中的“没有类”选择器。通过包含多个类的特定类名称选择一个元素

时间:2019-01-15 16:42:54

标签: javascript jquery

我引用了this answer,但对我没有用。

我想从包含多个类的元素中选择一个特定的类名称。

<i class="fas fa-star fa-lg clicked"></i>

<i class="fas fa-star fa-lg"></i>

<i class="fas fa-star fa-lg"></i>

clicked是一个自定义类,其中包含color:red

JS文件:

$("i").click(()=> {
    changeColor();
})


const changeColor = () => {
    if (!$(this).hasClass('clicked')){
        console.log('not clicked class')
    }
}

const changeColor = () => {
   if ($("i:not(.clicked)")){
     console.log("no clicked class")
   }
}

两者均无效。如果您知道为什么,请告诉我。

3 个答案:

答案 0 :(得分:3)

您没有正确捕获java HelloWorld.java,箭头符号不能使用隐式this引用,请避免与this一起使用:

  

箭头函数表达式的语法比函数表达式短,并且没有自己的this,arguments,super或new.target。这些函数表达式最适合非方法函数,因此不能用作构造函数。

我对您的代码进行了重新整理,使其可以按您期望的方式工作:

JQuery
$("i").click(function()
{
    changeColor($(this));
});

const changeColor = (obj) =>
{
    if (!obj.hasClass('clicked'))
        console.log('not clicked class');
}
.clicked {
   color: red;
}

答案 1 :(得分:0)

您可以尝试使用element.is('.clicked')吗?您可以使用is

尝试多种组合

答案 2 :(得分:0)

您可以使用this代替event.currentTarget

$("i").click(function(event)
{
    changeColor($(event.currentTarget));
});

const changeColor = ($element) =>
{
    if (!$element.hasClass('clicked'))
        console.log('not clicked class');
}
.clicked {
   color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<i class="fas fa-star fa-lg clicked">Button 1</i>

<i class="fas fa-star fa-lg">Button 2</i>

<i class="fas fa-star fa-lg">Button 3</i>

在代码中使用this可能会造成混淆,因为您需要充分了解其工作原理。因此,许多人倾向于不使用它。

请记住,我将obj重命名为$element。我强烈建议使用$前缀来表明此变量包含jQuery。