2
<ul id="bad-drifting">
    <li>text</li>
</ul>

http://jsfiddle.net/wZ8MC/2/

jQuery(document).ready(function() { 
    if (jQuery('#bad-drifting').has('em')) {
        jQuery('#bad-drifting').css({'color': 'red'});
        jQuery('#bad-drifting').css({'font-weight': 'bold'});
    }
});

http://jsfiddle.net/Xzn6y/

jQuery(document).ready(function() { 
    if (jQuery('#bad-drifting li:has(em)')) { // .has('em')
        jQuery('#bad-drifting').css({'color': 'red'});
        jQuery('#bad-drifting').css({'font-weight': 'bold'});
    }
});

私がやりたいのは、いくつかの CSS を設定するだけでなく、より複雑な変更を加えることですが、これが常に true を返す理由がわかりません...それはバグですか、それとも何が欠けていますか?

4

5 に答える 5

6

これhasは、jQuery オブジェクトを返し、オブジェクトが JavaScript では真の値であるためですlength。プロパティを使用する必要があります。

if (jQuery('#bad-drifting').has('em').length) {
于 2013-04-29T11:28:27.343 に答える
1

常に真実であるjQueryオブジェクトを返すlengthため、確認する必要があります。jQuery('#bad-drifting li:has(em)')

if (jQuery('#bad-drifting li:has(em)').length) { // .has('em')
于 2013-04-29T11:29:06.450 に答える
0

jQuery の「コレクション」の長さを確認します。

 if (jQuery('#bad-drifting li:has(em)').length > 0) { // There is at least one element

それ以外の場合、jQuery が返すものは常に true であるため、常に true になります

于 2013-04-29T11:34:38.503 に答える