1

私はこのHTMLテーブルを持っています:

<table id="languages" border="0" cellspacing="1">
  <thead>
    <tr>
      <th>Language</th>
      <th>Type</th>
      <th>Invented</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Java</td>
      <td>Static</td>
      <td>1995</td>
    </tr>
    <tr>
      <td>Ruby</td>
      <td>Dynamic</td>
      <td>1993</td>
    </tr>
    <tr>
      <td>Smalltalk</td>
      <td>Dynamic</td>
      <td>1972</td>
    </tr>
    <tr>
      <td>C++</td>
      <td>Static</td>
      <td>1983</td>
    </tr>
  </tbody>
</table>

この JavaScript を実行すると:

alert($('td').index($('td:contains(C++)')))

というポップアップが表示されますが9、これは私が期待するものです。

そして、これを実行すると: alert($('td:eq(9)').text())、ポップアップには と表示されますが、これC++も期待どおりです。9しかし、このように、2番目のセレクターにハードコーディングする代わりに、最初の関数/選択を入れようとすると...

alert($('td:eq($('td').index($('td:contains(C++)')))').text())
// just replacing the hard coded 9 with the first selector, as it gives a value of 9

...何も起こりません。というポップアップは表示されC++ません。誰が私が間違っているのか教えてもらえますか?

4

2 に答える 2

5

問題は、内側のセレクターで一重引用符をエスケープしていないため、その時点で文字列を効果的に終了しているため、エラーがスローされていることです。これを変える:

alert($('td:eq($('td').index($('td:contains(C++)')))').text())

これに:

alert($('td:eq(' + $('td').index($('td:contains(C++)')) + ')').text())
于 2012-08-08T11:17:33.263 に答える
1

以下はうまくいくはずです:

alert($('td:eq('+$('td').index($('td:contains(C++)'))+')').text())
于 2012-08-08T11:18:19.420 に答える