每个循环中未定义.next()

时间:2013-07-24 16:32:29

标签: javascript jquery

我试图遍历所有价格范围,然后插入一些显示其节省的HTML。

只要删除.each函数和(this).next,我就可以将其用于一个产品上。

我在Firebug中遇到的错误是TypeError: jQuery(...).next(...).html(...) is undefined

jQuery('.price').each(function(){

    var pricea = parseInt(jQuery(this).next(".count .amount:first").html().replace("£","")) ;
    var priceb = parseInt(jQuery(this).next(".count .amount:last").html().replace("£",""));
    var total = (pricea - priceb) / (pricea) * 100;
    var totalfixed = total.toFixed();
    jQuery(this).next('.saving').append(totalfixed);

    console.log(totalfixed);

});

我的HTML:

<li class="product ">
  <span class="price">
    <del class="count"><span class="amount2">WAS</span><span class="amount">&pound;35</span></del>
    <ins class="count"><span class="amount2">NOW </span><span class="amount">&pound;20</span><span style="clear:both" class="saving"> <br><br> YOU SAVE %</span></ins> </span> 
</li>

<li class="product ">
  <span class="price">
    <del class="count"><span class="amount2">WAS</span><span class="amount">&pound;35</span></del>
    <ins class="count"><span class="amount2">NOW </span><span class="amount">&pound;20</span><span style="clear:both" class="saving"> <br><br> YOU SAVE %</span></ins> </span> 
</li>

您可以查看实时演示Here

2 个答案:

答案 0 :(得分:1)

.next('.saveing')期望在.price旁边找到一个带有保存类的span标记,如下所示:

<span class="price"></span>
<span class="saving"></span> // <-- it is looking for this

但你的代码是这样的:

<span class="price">
    <span class="saving"></span>
</span>

根据您的情况,您需要

jQuery(this).find('.saving').append(totalfixed); //this will find .saving inside of .price

对于记录,我只能在我的编辑器中将html放在突出显示开/关标签时才能看到。请格式化您的代码不仅适合我们,也适合您自己,它会为您节省很多麻烦。

答案 1 :(得分:1)

当我将上述代码放入this jsfiddle时,我得到了一个不同的错误:

  

未捕获的TypeError:无法调用未定义的方法'replace'。

这解决了您的问题:

jQuery('.price').each(function(){

    var pricea = parseInt(jQuery(this).find(".amount:first").html().replace("£","")) ;
    var priceb = parseInt(jQuery(this).find(".amount:last").html().replace("£",""));

    var total = (pricea - priceb) / (pricea) * 100;

    jQuery(this).next('.saving').append(total.toFixed());

});

.find()jQuery(this)内搜索类.amount的元素(:first和:last one)