2011-10-13 92 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 
    }); 
}); 
相关问题