2011-02-28 186 views
1

我有一个select和2 td标签如下。使用jQuery选择下一个标签

<select name="accesslevel"><option value="A1">A1</option> 
<option value="A2">A2</option></select> 

<td id="Level3"> 

<td id="Level4"> 

我需要隐藏td与Level3的ID,如果A1在选择被选中,并显示与级别4 ID,反之亦然的TD。

该组合在html中重复了很多次,所以我必须在使用jQuery的select标记之后找到下一个td

任何人都可以帮忙吗?

回答

2

假设你的选择也是相同的TR

$("#accesslevel").change(function(){ //give an id to your select box 
    if(condition){ 
    $(this).parent().nextAll("#Level3").hide(); 
    $(this).parent().nextAll("#Level4").show(); 
    } 
}); 

这只是给你一个想法的TD内。通过将父代存储在变量中,然后搜索其他节点,显然可以优化代码。

想法是找到父TD,然后使用nextAll来查找其他TD。你也可以找到父行TR,然后使用TR.children(“#Level3”)

+0

为什么不直接使用'#Level3'不是长遍历链? 'id's是唯一的,不需要遍历DOM的元素 – 2011-02-28 11:16:30

+0

@Yi Jiang,由于这是在一个TABLE标签中,每行可以有相同的id,特别是在HTML生成的情况下与PHP/ASP – Arun 2011-02-28 11:19:57

+0

服务器是否可悲,不同于几乎所有其他语言在SO上,我们假设OP的代码*无效*而不是有效的?但是,是的,我同意,在这种情况下,最好保证安全,而不要抱歉...... – 2011-02-28 11:23:05

0

没有看到你所有的标记,我不知道你的<select>应该被包裹在<td>

<td><select>...</select></td> 
<td class="level3"> 
<td class="level4"> 

在这种情况下,你可以不喜欢

$('select#someId').change(function() { 
    var $nextTds = $(this).parents('td:first').nextAll('td:lt(2)'); 
    //manipulate $nextTds 
] 

如果您<td>元素都有标识,这不是“重复”在整个代码的ID是唯一的每个元素 - :lt(2)过滤器将只检索索引的td元件01

1
$(document).ready(function(){  
    $("select[name='accesslevel']").change(function(){  
    if($(this).val()=="A1")  
    {  
     $(this).parent().next().find("td[id='Level3']").show();  
     $(this).parent().next().find("td[id='Level4']").hide();  
    }  
    if($(this).val()=="A2")  
    { 
     $(this).parent().next().find("td[id='Level3']").hide();  
     $(this).parent().next().find("td[id='Level4']").show();  
    } 
    }); 
}); 

看到一个工作示例here

+0

只有当有一行时,这才会起作用。一旦添加了具有相同ID的元素的多行,它将隐藏所有行中的所有元素 – Arun 2011-02-28 11:21:17