Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅在JQuery上的指定区域更改类?_Javascript_Jquery_Addclass - Fatal编程技术网

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)。