jQuery:hasClass部分匹配

时间:2015-11-06 20:22:54

标签: javascript jquery attributes selector word

使用Attribute Contains Word Selector时,它应该评估为true吗?我正在尝试在if / else语句中使用它,如下所示,并且它没有评估为true。

<li class="orange blue">
    <div class="answer">Some Content</div>
</li>
<input type="button" name="yellow" value="yellow" class="yellow" />
<br />
<input type="text" value="" class="result" />

$("input.yellow").click(function() {
    if ( $("div.answer").parent().hasClass($("[class~='bl']")) == true ){
        $("input.result").val("has class");
    } else {
        $("div.answer").parent().addClass("blue");
        $("input.result").val("class added")
    };
});

The fiddle

2 个答案:

答案 0 :(得分:1)

根据建议的评论,hasClass会收到string。所以你可以使用is: -

if ( $("div.answer").parent().is($("[class~='bl']"))){

或者你可以创建一个小jquery插件: -

$.fn.hasPartialClass = function(partial){
  return new RegExp(partial).test(this.prop('class')); 
};

并使用如下: -

if ( $("div.answer").parent().hasPartialClass("bl")){

答案 1 :(得分:1)

您忘记了使用&#34;属性包含 Word 选择器&#34; 因此,要匹配此选择器,您必须使用[class~='blue']。 您不能使用[class~='bl'],因为类属性确实包含单词&#39; bl&#39;但是“蓝色”这个词。

使用此选择器的方法:

    $("input.yellow").click(function() {
    if ( $("div.answer").parent().is("[class~='blue']") ){
        $("input.result").val("has class");
    } else {
        $("div.answer").parent().addClass("blue");
        $("input.result").val("class added")
    };
});