2011-10-13 140 views
2

我只是試圖找出A(即P)的父級是否有定義在其上的類some_class。然後我將使用true/false結果作爲條件。jQuery`hasClass()`不會產生任何結果

我有一個簡單的結構:

<div class="things"> 
    <p class="some_class"> 
     <a href="something">Link One</a> 
    </p> 
</div> 

和一些jQuery腳本:

$(function() { 
    $('.things a').click(function(e) {  
     e.preventDefault();  
     alert($(e.target).parent()[0].nodeName); //works, displays "P" 
     alert($(e.target).parent()[0].hasClass('some_class').toString()); //No output 
     }); 
    }); 

到第二alert()調用什麼都不做 - 不顯示任何警告框可言。

我在做什麼錯?

一個JSFiddle is here

回答

6
alert($(e.target).parent()[0].hasClass('some_class').toString()) 
在你上面的線

轉換您的jQuery對象返回一個HTML DOM對象。因此,對於$(e.target).parent()[0],hasClass方法不存在。

取出[0]

alert($(e.target).parent().hasClass('some_class').toString()) 

這是你的小提琴是我修改http://jsfiddle.net/LVerN/5/

+0

@Zabba ...這是一個老問題我回答一個鏈接,它應該給你上的區別的一些見解jQuery對象和HTML DOM對象。 http://stackoverflow.com/questions/4069982/document-getelementbyid-vs-jquery/4070010#4070010 –

+0

謝謝!還使用'$(this)'工作。再次閱讀jQuery的時間! – Zabba

1

hasClass()是要返回的truefalse

$(e.target).parent()[0].hasClass() 

一個布爾值將返回錯誤,因爲索引爲零的對象不是jQuery對象。所以你要刪除的[0]

1

我已經更新了jsFiddle

<div class="things"> 
    <p class="some_class"> 
     <a href="something">Link One</a> 
    </p> 
</div> 

$(function() { 
    $('.things a').click(function(e) {  
     e.preventDefault();  
     //alert($(e.target).parent().nodeName); //Shows "undefined". wtf 
     alert($(e.target).parent()[0].nodeName); //works 
     alert($(this).parent().hasClass('some_class').toString()); //No output 
    }); 
}); 
相關問題