在jQuery'中使用类名;s.最近的()

在jQuery'中使用类名;s.最近的(),jquery,class,math,closest,Jquery,Class,Math,Closest,我正在尝试对“运行总数”进行一些计算,这是我的代码: $('.quantity_input').live('change',function(){ var ValOne = parseFloat($(this).val()); var ValTwo = parseFloat($(".price").text()) var totalTotal = ((ValOne) * (ValTw

我正在尝试对“运行总数”进行一些计算,这是我的代码:

$('.quantity_input').live('change',function(){         
                var ValOne = parseFloat($(this).val());
                var ValTwo = parseFloat($(".price").text())
                var totalTotal = ((ValOne) * (ValTwo));                         
                $('.cost_of_items').closest('.cost_of_items').text(totalTotal.toFixed(2));
                calcTotal();
            });     
.quantity_input是一个输入,.price是产品的价格,.cost_of_items是我想更新该项目总成本的地方,即item1=£5 x 3 quantity=£item1总计15 calcTotal()是一个只更新订单总成本的函数。问题是将所有的数学都放在表的一行中,即我在上面的代码中进行计算,而不是停留在它的行上,而是用class.cost\u of\u items等更新所有字段

显示我的html的问题在于它是由jQuery.appends()动态添加的,但下面是相关的jQuery:

$('#items').append('<tr class="tableRow"><td><a class="removeItem" href="#"><img src="/admin/images/delete.png"></img></a><td class="om_part_no">' + omPartNo + '</td><td>' + supPartNo + '</td><td>' + cat + '</td><td class="description">' + desc + '</td><td>' + manuf + '</td><td>' + list + '</td><td>' + disc + '</td><td><p class="add_edit">Add/Edit</p><input type="text" class="quantity_input" name="quantity_input" /></td><td class="price_each_nett price">' + priceEach + '</td><td class="cost_of_items"></td><td><p class="add_edit">Add/Edit</p><input type="text" class="project_ref_input" name="project_ref_input" /><p class="project_ref"></p></td></tr>');

最近的将找到最近的祖先(父母、祖父母),但随后需要进行查找以找到要更新的正确元素。例如,如果表行中有一个元素,而该行中需要另一个元素:

$('.myElement').closest('tr').find('.someOtherElement');
编辑:

在你的情况下,你会想要

$(this).closest('tr').find('.cost_of_items').text(totalTotal.toFixed(2));

您需要在包含此
中找到
项目的
.cost\u

$(this).closest('tr').find('.cost_of_items')

您不需要使用“查找…”。这有助于缩小搜索范围。你应该使用它。

我不会使用
.find()
。我猜,使用
.cost\u of_items
类遍历最近的
并获取兄弟
可能会更有效


编辑:为了澄清,这里是
.append()
中的标记:


“+omPartNo+”
“+supPartNo+”
“+cat+”
“+desc+”
“+manuf+”
“+列表+”
“+光盘+”
添加/编辑

“+priceEach+” 添加/编辑


此处看起来错误的行是
$(“.cost\u of_items”)。最接近(“.cost\u of_items”)
。您也可以给我们看一下您的HTML吗?((ValOne)*(ValTwo))中的所有括号完全没有作用。@用户-您的
.append()
中缺少了一个结束标记。上下文参数只是使返回的结果必须在特定祖先的上下文中。因为
.cost\u of_items
不是
.quantity\u input
的祖先,所以仍然需要一些其他方法,比如
.find()
。是的,请不要投票给我,因为询问者的代码问题太大,他必须使用find()在一个事件中调用“最近的”,而不是让上下文随时可用。不确定你是否指的是我,但如果是,我没有投你反对票。我刚才指出了错误。@user-您的代码很好。您在接收事件的元素上有一个起点,需要获得与该起点相关的适当的
.cost\u项目
元素。我认为这是一个好的答案。我想我应该规定,根据事件的绑定方式,您可能已经有了上下文。cost_of_items不是兄弟姐妹,而是兄弟姐妹的后代。@Keith-谢谢您的否决票,但您错了<代码>
。对不起-我读得很快,还以为是tr。我要撤销我的密码vote@Keith-没问题。谢谢你的撤销。
$(this).closest('tr').find('.cost_of_items')
$(this).closest('td').siblings('.cost_of_items');
<tr class="tableRow">
     <!-- NOTE THAT THE CLOSING </td> IS MISSING FOR THE FIRST <td> -->
    <td><a class="removeItem" href="#"><img src="/admin/images/delete.png"></img></a>
    <td class="om_part_no">' + omPartNo + '</td>
    <td>' + supPartNo + '</td>
    <td>' + cat + '</td>
    <td class="description">' + desc + '</td>
    <td>' + manuf + '</td>
    <td>' + list + '</td>
    <td>' + disc + '</td>
     <!-- TRAVERSE TO HERE -->
    <td>
       <p class="add_edit">Add/Edit</p>
        <!-- START HERE -->
       <input type="text" class="quantity_input" name="quantity_input" />
    </td>
    <td class="price_each_nett price">' + priceEach + '</td>
     <!-- SIBLING IS HERE -->
    <td class="cost_of_items"></td>
    <td><p class="add_edit">Add/Edit</p><input type="text" class="project_ref_input" name="project_ref_input" /><p class="project_ref"></p></td>
</tr>