0

我对 jquery 中的表达式有一个简单的问题,以选择一个涉及 for 循环的类。基本上,我有两个步骤: 1. 生成一些带有循环的 html 表。2. 使用 jQuery 取消隐藏它们。

下面是 1. 生成 html 表格的简化代码(我会添加一个循环索引来分隔每个循环创建的表格): 2. 第二步的关键部分是取消隐藏生成的表格。我的选择器写为:method_options_1'+i+',其中 i 是 for 循环索引。

for (var i = 2; i <= 5; i++) {
  <tr class="method_options_1'+i+'" style="display: none;"><th><label for="id_CAM_1">Chemical application Method (CAM):</label></th>
      <td><select name="CAM_1_'+i+'" id="id_1_'+i+'">
        <option value="2">2-Interception based on crop canopy</option>
        <option value="9">9-Linear foliar based on crop canop</option></select>
      </td></tr>

  $('.method_options_1'+i).closest('tr').show();  
}

但是,此选择器不起作用,这意味着我无法显示隐藏元素。同时,如果我从 HTML 和 jquery 中删除索引 i,则选择器可以工作。由于我必须保留 i 索引,任何人都可以给我一些建议(我试图删除最接近的('tr'),但它不起作用)?

4

3 回答 3

1

'.method_options_1'+i已经是tr,所以首先尝试删除该closest('tr')步骤:

$('.method_options_1'+i).show();

http://jsfiddle.net/WJDCm/

于 2012-06-29T18:14:08.177 回答
0

那是因为就 Javascript 而言,name它只是一个字符串:method_options_1'+i'. 它不会评估该字符串中的任何代码。如果您想正确执行此操作,请执行以下操作:

HTML:

<tr class="method_options">etc</tr>

Javascript:

$('.method_options:eq('+i+')').show();

编辑:

也许我误解了。您在 Javascriptfor循环中生成它,因此i代码空间中的有效变量也是如此。如果是这种情况,那么您只需取出closest(),因为它告诉 jQuery 沿着 DOM 向上移动并选择tr它找到的第一个。在这种情况下,这似乎没什么。您想要处理tr您选择的那个,而不是您选择的tr那个的父级。

于 2012-06-29T18:14:13.937 回答
0

我真的很想知道你是如何运行上面的代码的......但是这样做确实有效

HTML:

 ​&lt;table id='myTable'>
 </table>​​​​​​​​

JavaScript:

$(function(){

  for (var i = 2; i <= 5; i++) {
     $('#myTable').append('<tr class="method_options_1'+i+'" style="display: none;"><th><label for="id_CAM_1">Chemical application Method (CAM):</label></th><td><select name="CAM_1_'+i+'" id="id_1_'+i+'">        <option value="2">2-Interception based on crop canopy</option>        <option value="9">9-Linear foliar based on crop canop</option></select>      </td></tr>');


     $('.method_options_1'+i).closest('tr').toggle('slow');   
  }


})

解决方案

于 2012-06-29T18:48:15.250 回答