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

您需要检查,length因为jQuery('#bad-drifting li:has(em)')返回一个始终真实的 jQuery 对象。

if (jQuery('#bad-drifting li:has(em)').length) { // .has('em')
于 2013-04-29T11:29:06.450 回答
0
if (jQuery('#bad-drifting').has('em')[0]) { // do Stuff
于 2013-04-29T11:30:00.783 回答
0

我最终这样做了:

if (jQuery('#bad-drifting em').length > 0) {
    console.log('we have some errors');
}   
于 2013-04-29T11:30:41.700 回答
0

检查 jQuery“集合”的长度:

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

否则它将永远为真,因为 jQuery 返回的永远是真

于 2013-04-29T11:34:38.503 回答