非常奇怪的javascript排序值行为

时间:2015-07-17 18:55:10

标签: javascript jquery

我一直在乱搞这几个小时,我唯一可以缩小它的是,如果有14个元素要排序,它不能正常工作,但如果有十三个,它工作正常

我试图通过它们内部的价格值来做一个基本的DIV元素。

这是简单的html -

<div class="wrap">
    <button id="numBnt">Numerical</button>
    <div id="container">
        <div class="box">
             <h2>£10.35</h2> 
        </div>
        <div class="box">
             <h2>£21.35</h2> 
        </div>
        <div class="box">
             <h2>£21.35</h2> 
        </div>
        <div class="box">
             <h2>£102.35</h2> 
        </div>
        <div class="box">
             <h2>£10.35</h2> 
        </div>
        <div class="box">
             <h2>£10.35</h2> 
        </div>
        <div class="box">
             <h2>£10.95</h2> 
        </div>
        <div class="box">
             <h2>£100.35</h2> 
        </div>
        <div class="box">
             <h2>£100.05</h2>

        </div>
        <div class="box">
             <h2>£200.00</h2> 
        </div>
        <div class="box">
             <h2>£5510.25</h2>

        </div>
         <div class="box">
             <h2>£19.80</h2>

        </div>
  <div class="box">
             <h2>£5510.25</h2>

        </div>
          <div class="box">
             <h2>£510.25</h2>

        </div>


    </div>
</div>

和javascript

var $divs = $("div.box");


$('#numBnt').on('click', function () {
    var numericallyOrderedDivs = $divs.sort(function (a, b) {
        return parseFloat($(a).find("h2").text().replace(/£/g, '')) > parseFloat($(b).find("h2").text().replace(/£/g, ''));
    });
    $("#container").html(numericallyOrderedDivs);
});

使用13个div元素,div完全排序。

这是一个示例 - http://jsfiddle.net/C2heg/380/

然后,如果我添加另一个并使其成为14个div,则排序无法正常工作。

这是一个示例 - http://jsfiddle.net/C2heg/378/

我正在敲打我的桌子!希望有人可以对此有所了解。

2 个答案:

答案 0 :(得分:2)

使用a - b代替a > b

$('#numBnt').on('click', function () {
    var numericallyOrderedDivs = $divs.sort(function (a, b) {
        return parseFloat($(a).find("h2").text().replace(/£/g, '')) - parseFloat($(b).find("h2").text().replace(/£/g, ''));
    });
    $("#container").html(numericallyOrderedDivs);
});

演示:http://jsfiddle.net/C2heg/381/

答案 1 :(得分:0)

你的小提琴都没有用,而且它与元素的数量无关。

但这有效:

var $divs = $("div.box");

$('#numBnt').on('click', function () {
    var numericallyOrderedDivs = $divs.sort(function (a, b) {
        var a = parseFloat($(a).find("h2").text().replace(/£/g, ''));
        var b = parseFloat($(b).find("h2").text().replace(/£/g, ''));

        return a - b;
    });
    $("#container").html(numericallyOrderedDivs);
});

比较两个项目时的排序函数如果相等则应返回0,如果第一个大于第二个,则返回正数,否则返回负数

这是updated fiddle