循环中的jquery类选择器

时间:2012-06-29 18:10:02

标签: javascript jquery

我对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'),但它不起作用)?

3 个答案:

答案 0 :(得分:1)

'.method_options_1'+i已经是tr,因此请先尝试删除closest('tr')步骤:

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

请参阅http://jsfiddle.net/WJDCm/

答案 1 :(得分:0)

这是因为就Javascript而言,name只是一个字符串:method_options_1'+i'。它不会评估该字符串中的任何代码。如果你想正确地做,做这样的事情:

HTML:

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

使用Javascript:

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

修改

也许我误解了。您在Javascript for循环中生成此内容,因此i是代码空间中的有效变量。如果是这种情况,那么你只需要取出closest(),因为它告诉jQuery向上移动DOM并选择它找到的第一个tr。在这种情况下,这似乎一无所获。您希望使用您选择的tr,而不是您所选择的父级tr

答案 2 :(得分:0)

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

HTML:

 ​<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');   
  }


})

Solution