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)')

with class<tr>を持つ以前の兄弟をすべて取得しています。<td>country

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

<tr>前のリストの最初の<tr>sを選択します

を取得するには、次の<td>ようにする必要があります。

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

編集: @KevinB が以下で指摘しているように、text()それが機能すると思わせる唯一の理由text()は、要素とそのすべての子のテキストを返すためです。そのため、引き続き取得できます<tr>が、その要素自体にはテキストがないため、その子のテキストのみが表示されます<td>

ではなくを選択していることを証明するには、次の<tr>手順を実行します。<td>

alert($(this).closest('tr').prevAll('tr:has(td.country)').first().prop('tagName'));

これにより、「TD」ではなく「TR」が出力されます。

于 2013-04-11T18:21:21.960 に答える