1

好的,所以这个人应该从目标标签中的 rel 属性中调用数字,但它返回为未定义:

$(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>
4

1 回答 1

1
$(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”。

于 2013-04-11T18:21:21.960 回答