Javascript 如何仅在JQuery上的指定区域更改类?
我有一个表,其中包含一些Javascript 如何仅在JQuery上的指定区域更改类?,javascript,jquery,addclass,Javascript,Jquery,Addclass,我有一个表,其中包含一些td元素,它们具有相同的类。但我只想在指定区域中更改claas。已选择 我要这样做: <tr> <td>--</td> <td class="mcost"></td> </tr> <tr class="selected"> <td><input type="radio" name="work" onclick="selone('.selected','#sel1','m'
td
元素,它们具有相同的类。但我只想在指定区域中更改claas。已选择
我要这样做:
<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>
但它将class改为all mcost elements=(不仅在指定的区域。如何改进它?您可以使用一种更好且不引人注目的方法:
删除html中的onclick事件
使用该脚本可以执行以下操作:
$(函数(){
$(“.selected:radio”)。单击(函数(){
var selected=$(this).parents(“.selected:first”);
selected.removeClass().addClass('mcost_dis');
selected.find('.mcost').removeClass().addClass('mcost');
});
}))
(但最后一行没有增加多少内容)
问题出在部分$('.+n+'cost')
这并不考虑它所调用的上下文。它将永远选择页面中的所有<代码> .MBOX元素。
如果将其更改为:
$(this.find('.+n+'cost'))
它将只在g的上下文中搜索。对f执行相同的操作。
但是,这完全取决于g和f是什么。使用。选择,在这种情况下,它应该能满足您的需要。您可以使用一种更好、不引人注目的方法:
删除html中的onclick事件
使用该脚本可以执行以下操作:
$(函数(){
$(“.selected:radio”)。单击(函数(){
var selected=$(this).parents(“.selected:first”);
selected.removeClass().addClass('mcost_dis');
selected.find('.mcost').removeClass().addClass('mcost');
});
}))
(但最后一行没有增加多少内容)
问题出在部分$('.+n+'cost')
这并不考虑它所调用的上下文。它将永远选择页面中的所有<代码> .MBOX元素。
如果将其更改为:
$(this.find('.+n+'cost'))
它将只在g的上下文中搜索。对f执行相同的操作。
但是,这完全取决于g和f是什么。在这种情况下,使用选择的应该可以满足您的需要。在您的中,您可以为.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项。这应该可以。请让我知道。在您的中,您可以为.mcost单元格重新查询整个dom。您需要执行以下操作:
function selone(g,f,n){
$(g).each(function(){
$(this).find('.'+n+'cost').removeClass().addClass(n+'cost_dis');
});
$(f).removeClass().addClass(n+'cost');
}
$(".selected td").each( function() { $(this).addClass("whatever"); } );
这只会更改$(g)元素中的.mcost项。这应该会起作用。请告诉我。如果您稍微更改选择器,我认为您根本不需要每个
循环。这会起作用吗:
$(".selected td").each( function() { $(this).addClass("whatever"); } );
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'的元素,这些元素是类'selected'元素的后代。如果稍微更改选择器,我认为您根本不需要每个
循环。这是否有效:
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'的元素,这些元素是类'selected'元素的后代。在您的示例中,它更改为两个td元素,但我只需要一个(按id)。在您的示例中,它更改为两个td元素,但我只需要一个(按id)。