$(this).closest('tr').prevAll('tr:has(td.country)').first()
使用此代码,您访问的不是<td>,而是<tr>,因此您无法访问rel它的属性。
让我们把它分开:
$(this).closest('tr')
不管$(this)是什么,你都在寻找它最亲近的父母<tr>
$(this).closest('tr').prevAll('tr:has(td.country)')
您正在将所有以前的兄弟姐妹都带到<tr>具有<td>with 类的兄弟姐妹中country。
$(this).closest('tr').prevAll('tr:has(td.country)').first()
您选择上一个s<tr>列表中的第一个<tr>
要获得<td>,您需要执行以下操作:
$(this).closest('tr').prevAll('tr:has(td.country)').first().find('td')
编辑:正如@KevinB 在下面指出的那样,text()让您认为它有效的唯一原因是因为text()返回元素及其所有子元素的文本。所以你仍然得到了<tr>支持,但由于该元素本身没有任何文本,你只能看到它的 child 的文本<td>。
为了证明您选择的是<tr>而不是<td>,请执行以下操作:
alert($(this).closest('tr').prevAll('tr:has(td.country)').first().prop('tagName'));
这将输出“TR”而不是“TD”。