attr()不工作但目标会调用其他命令?

时间:2013-04-11 18:18:04

标签: jquery text target attr

好的,所以这个人应该在目标标签中调用rel属性的数字,但是它返回为undefined:

$(this).closest('tr').prevAll('tr:has(td.country)').first().attr('rel')


奇怪的是,这会调用该标签中的文字:

$(this).closest('tr').prevAll('tr:has(td.country)').first().text()

...但是当我使用attr('rel')它是未定义的?怎么会这样?它正确调用text()的示例标记是:

<td colspan="6" class="country" rel="3">United States</td>

1 个答案:

答案 0 :(得分:1)

$(this).closest('tr').prevAll('tr:has(td.country)').first()

使用此代码,您无法访问<td>,而是访问<tr>,因此您无法访问rel的{​​{1}}属性。

让我们把它分开:

$(this).closest('tr')

无论$(this)是什么,您都找到了最近的父<tr>

$(this).closest('tr').prevAll('tr:has(td.country)')

您所有以前的兄弟姐妹都拥有<tr>的{​​{1}}班级<td>

country

您选择上一个$(this).closest('tr').prevAll('tr:has(td.country)').first() s

列表的第一个<tr>

要获得<tr>,您需要执行以下操作:

<td>

编辑:正如@KevinB在下面指出的那样,$(this).closest('tr').prevAll('tr:has(td.country)').first().find('td') 让你认为它有效的唯一原因是因为text()返回元素及其所有子元素的文本。因此,您仍然可以返回text(),但由于该元素本身没有任何文本,因此您只能看到其子<tr>的文本。

要证明您选择了<td>而不是<tr>,请执行以下操作:

<td>

这将输出“TR”而不是“TD”。