2011-09-21 25 views
0

我有一個表與一些td元素具有相同的類。但我只想在指定區域.selected更改claas。如何僅在JQuery的指定區域更改類?

我有這樣的:

<tr> 
<td>--</td> 
<td class="mcost"></td> 
</tr> 
<tr class="selected"> 
<td><input type="radio" name="work" onclick="selone('.selected','#sel1','m');" checked="checked" /></td> 
<td id="sel1" class="mcost"></td> 
</tr> 
<tr class="selected"> 
<td><input type="radio" name="work" onclick="selone('.selected','#sel2','m');" /></td> 
<td id="sel2" class="mcost"></td> 
</tr> 
<tr> 
<td>--</td> 
<td class="mcost"></td> 
</tr> 

而且試試這個:

function selone(g,f,n){ 
    $(g).each(function(){ 
     $('.'+n+'cost').removeClass().addClass(n+'cost_dis'); 
    }); 
    $(f).removeClass().addClass(n+'cost'); 
} 

但它的變化類所有mcost元素=(不僅是在特定的區域,如何提高它

回答

2

在你的.each中,你需要查詢.mcost單元格的整個dom。您需要執行以下操作:

function selone(g,f,n){ 
    $(g).each(function(){ 
     $(this).find('.'+n+'cost').removeClass().addClass(n+'cost_dis'); 
    }); 
    $(f).removeClass().addClass(n+'cost'); 
} 

這隻會更改$(g)元素內的.mcost項目。這應該工作。讓我知道。

+0

是的!完善!謝謝! – skywind

1

您可以使用更好,不引人注目的方法:

  1. 刪除html中的onclick事件。

  2. 使用腳本來此:

    $(函數(){$ (」選擇:單選 「)點擊(函數(){VAR 選擇= $(本)。家長(」 .selected:第一「); selected.removeClass()addClass( 'mcost_dis'); selected.find()removeClass()addClass( 'mcost '); }); })。' mcost。'。 ;

(不過最後一行不會增加太多)

的問題是在部分$('.'+n+'cost') 這並不認爲這是所謂的背景下,它會選擇百達在所有.mcost元素這一頁。 如果將其更改爲: $(this).find('。'+ n +'cost') 它將僅在g的上下文中進行搜索。爲f做同樣的事情。然而,這一切都取決於g和f是什麼。在這種情況下使用.selected它應該給你你想要的。

+0

在你的例子中它改變爲兩個td元素,但我只需要一個(由id)。 – skywind

+0

請詳細解釋 – Rickard

1
$(".selected td").each(function() { $(this).addClass("whatever"); }); 
1

我不認爲你需要的each循環可言,如果你改變你的選擇一點。這是不是工作:

function selone(g,f,n) { 
    // find elements that already have the class, and change them 
    $(g + " ." + n + 'cost').removeClass().addClass(n+'cost_dis'); 

    // add class to newly selected item 
    $(f).removeClass().addClass(n + 'cost'); 
} 

假設你有

selone('.selected','#sel1','m'); 

稱它爲然後函數$(g + " ." + n + 'cost')內的計算結果爲$(".selected .mcost") - 這意味着「發現與元素的後代類的mcost'的元素班'選''「。