2011-02-28 190 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