2015-11-06 204 views
1

使用Attribute Contains Word Selector时是否应该评估为true?我试图在if/else语句中使用它,如下所示,它不计算为真。jQuery:hasClass部分匹配

<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

+1

呃,hasClass接受字符串。你给它一个jQuery对象。 – Taplar

+0

你可能会考虑使用filter().length。或者是()。 .is(“[class〜='bl']”) – Taplar

+0

谢谢,我会试试。我是jQuery/javascript的新手。 – pn03

回答

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

你忘了你使用的是“属性包含选择器” 因此,这个选择器要匹配,你必须使用[class~='blue']。 您不能使用[class~='bl'],因为class属性不包含单词'bl',而是单词'blue'。

使用这种选择方式:

$("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") 
    }; 
});