2011-04-19 56 views
0

我开始使用JQuery和一般的JavaScript,但我遇到了一个我不理解的问题。假设我有一个数据表(假设表的id是'tbl'),它有元素,可能有也可能没有与之关联的'orderasc'类(每次只有一个元素可以拥有这个元素,但没有人必须拥有它)。jquery:.find()搜索的属性

我可以检查元素的存在,使用以下的“orderasc”类:

if($('#tbl th').is('.orderasc')) { 
    //do something here 
} 

工作正常。在if语句内部,我试图提醒具有'orderasc'类的元素的name属性。尝试以下不起作用(显示未定义):

alert($('#tbl th').find('.orderasc').attr('name')); 

但下列情况:

alert($('#tbl').find('th.orderasc').attr('name')); 

同样的,当我修改我原来的if语句这样:

if($('#tbl').is('th.orderasc')) { 
    //do something here 
}  

它不起作用。 有人可以向我解释幕后发生了什么,并给我这些结果吗?

回答

0

$('#tbl th').find...递归搜索th中的DOM,但是您的th是具有该类的元素。

要补充的是,find函数是递归的,并且可能很昂贵。至少比children函数或psuedo类更昂贵。我建议这样的事情,而不是:

alert($('#tbl th.orderasc:first').attr('name')); 

jsFiddle

+0

有关使用find()发生递归的信息。感谢您的解释和提示! – user417918 2011-04-19 22:45:17

0

.find()搜索中的孩子,元素中。由于th的类别为orderasc,因此您的选择器:$('#tbl th')已在th.find()将在th中看orderasc类。