1

我在尝试替换计算值时遇到了一些麻烦。在此函数中,我们尝试使用隐藏文本框的值计算折扣并将原始价格替换为新的折扣值。我可以获得折扣和价值,但它不会将价值替换到 div 中。我认为我的“最接近”不起作用...任何想法我在这里做错了什么。

$(document).ready(function() {
    $("#cal_discount").click(function() {

        $(".price_val").each(function() {
            var Percent = $('#percent_dis').val();
            var price = $(this).val();
            var existing = $(this).closest('.existing_price');
            var new_price = (price - (price * (Percent / 100)));
            var formatted = new_price.toFixed(2);
            existing.text(formatted);
        });
    });
});

<div class="existing_price" style="float:left">22</div>
<input  type="hidden"  class="price_val" value="22" />

<input name="percent_dis" type="text" id="percent_dis" size="3" /> %      <img src="admin/images/btn/cal_discount.png" width="97" height="17" style="float:left; margin-right:10px; margin-top:5px; cursor:pointer" id="cal_discount" />   
4

3 回答 3

3

问题在于</div>22之后的不应该在那里..

.closest()向上 DOM 层次结构.. 向上意味着祖先......

所以它寻找与选择器匹配的第一个祖先..

因为.price_val它不在里面.existing_price它不会找到它..

将您的代码更改为

<div class="existing_price" style="float:left">
  <span class="value">22</span>
  <input  type="hidden"  class="price_val" value="22" />
</div>

和js

    $(".price_val").each(function() {
        var Percent = $('#percent_dis').val();
        var price = $(this).val();
        var existing = $(this).siblings('.value');
        var new_price = (price - (price * (Percent / 100)));
        var formatted = new_price.toFixed(2);
        existing.text(formatted);
    });

会解决这个问题。

于 2012-04-27T19:45:39.740 回答
2

您需要的.prev不是最接近的,即如果 prev 元素始终是div.existing_price

尝试

var existing = $(this).prev(); //should return div for your existing markup
于 2012-04-27T19:47:27.767 回答
0

Closest 仅在元素是后代而不是兄弟元素时才有效 - 请prev改用。

于 2012-04-27T19:47:52.163 回答