2015-11-06 410 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") 
    }; 
});