我对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'),但它不起作用)?
答案 0 :(得分:1)
'.method_options_1'+i
已经是tr
,因此请先尝试删除closest('tr')
步骤:
$('.method_options_1'+i).show();
答案 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');
}
})