为什么这个方法在另一个方法中不起作用?

时间:2012-08-08 11:11:39

标签: javascript jquery selector

我有这个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,就像这样......

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++,这是人们所期望的,我没有得到任何弹出的问题。谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:5)

问题是你没有转义内部选择器中的单引号,所以你在这一点上有效地退出了字符串,这就是抛出一个错误。改变这个:

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

对此:

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

答案 1 :(得分:1)

以下应该有效:

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