2015-11-24 193 views
0

我有下面的代碼,但由於某種原因,jQuery沒有選擇元素類名,我知道如果元素有多個類調用.attr('class')不會返回它們,但.hasClass('class-name')應該能夠識別元素是否具有類名。
我的問題是,jquery返回的類名稱爲undefined(我從行中得到了這個評論。)。 如何才能讓#parent的所有其他div孩子,沒有the-one類別的黃色背景。jquery沒有獲取元素的類名

$(document).ready(function() 
 
{ 
 
    var j = $('#parent> div').size(); 
 
    for(var i =0;i<j;i++) 
 
    { 
 
     //alert($('#parent> div').children().eq(i).attr('class')); 
 
     if(!$('#parent> div').children().eq(i).hasClass('the-one')) 
 
     { 
 
      $('#parent> div').children().eq(i).css('background','yellow') 
 
     } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id = "parent"> 
 
    <div class = "one the-one">one</div> 
 
    <div class = "two">two</div> 
 
    <div class = "three">Three</div> 
 
    <div class = "four">Four</div> 
 
</div>

+0

*」我明白,如果元素有多個類調用.attr('class')不會返回它們「* - 這是不正確的。 'attr('class')'將返回類屬性,該屬性包含一個包含所有類名的單個字符串,用空格分隔。 – GolezTrol

+0

你已經有孩子選擇'>'不要使用.children(); –

回答

2

children()電話是多餘的,因爲沒有div元素的任何子元素。刪除和代碼工作:

$(document).ready(function() { 
 
    var j = $('#parent> div').size(); 
 
    for (var i = 0; i < j; i++) { 
 
    //alert($('#parent> div').eq(i).attr('class')); 
 
    if (!$('#parent> div').eq(i).hasClass('the-one')) { 
 
     $('#parent> div').eq(i).css('background', 'yellow') 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="parent"> 
 
    <div class="one the-one">one</div> 
 
    <div class="two">two</div> 
 
    <div class="three">Three</div> 
 
    <div class="four">Four</div> 
 
</div>

另外請注意,您可以使用each()this關鍵字來引用循環中的元素整理你的JS邏輯:

$('#parent > div').each(function() { 
    if ($(this).hasClass('the-one')) 
     $(this).css('background', 'yellow') 
}); 
+1

將選擇的結果存儲在'var $ divs = $(「#parent> div」)'之類的東西中也是一個好主意,然後重用它,而不是每次都查詢。 –

+0

@YeldarKurmangaliyev謝謝,只是編寫了一個編輯器,在單個選擇器上使用'each'來提供改進版本。 –

+0

謝謝,特別是關於使用each()的建議。 – domii

2

問題是$('#parent> div')返回#parent的子div,所以再次調用children() d oes不返回任何元素。

您可以使用一個簡單的jQuery選擇,而不是一個循環像

$(document).ready(function() { 
 
    $('#parent> div:not(.the-one)').css('background', 'yellow') 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="parent"> 
 
    <div class="one the-one">one</div> 
 
    <div class="two">two</div> 
 
    <div class="three">Three</div> 
 
    <div class="four">Four</div> 
 
</div>


但是你可以使用CSS這一點,沒有必要使用jQuery

#parent> div:not(.the-one) { 
 
    background: yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="parent"> 
 
    <div class="one the-one">one</div> 
 
    <div class="two">two</div> 
 
    <div class="three">Three</div> 
 
    <div class="four">Four</div> 
 
</div>

1

爲什麼不嘗試更簡單的方法?:

$("#parent > div").not(".the-one").css("background", "yellow"); 

More info about jQuery's .not method...

+0

或者爲什麼不只是css? –

+1

不使用css的原因:不是與ie <9不兼容,但上述方法很好。 – domii

1

$(document).ready(function() { 
 
    $('#parent > div').each(function(){ 
 
    var classtheone = $(this).hasClass('the-one'); 
 
    if(!classtheone){ 
 
    $(this).css('background-color', 'yellow') 
 
    } 
 
    
 
    
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id = "parent"> 
 
    <div class = "one the-one">one</div> 
 
    <div class = "two">two</div> 
 
    <div class = "three">Three</div> 
 
    <div class = "four">Four</div> 
 
</div>

嘗試這種方式

1

試試這個

$("#parent div").each(function(){ 
var me=$(this); 
if(me.hasClass("the-one")) { me.css({"background-color" : "yellow"}); } 
}) 
1

書面alread Ÿ在其他的答案,你children()通話的問題,我建議使用下述溶液與each(),因爲它是簡單

$(document).ready(function() 
 
{ 
 
$('#parent div').each(function(i) { 
 
    if (!$(this).hasClass('the-one')) { 
 
     $(this).css('background','yellow'); 
 
    } 
 
}); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id = "parent"> 
 
    <div class = "one the-one">one</div> 
 
    <div class = "two">two</div> 
 
    <div class = "three">Three</div> 
 
    <div class = "four">Four</div> 
 
</div>