Javascript 使用jquery对元素进行排序(数字比较的麻烦)

Javascript 使用jquery对元素进行排序(数字比较的麻烦),javascript,jquery,sorting,Javascript,Jquery,Sorting,我用它来排序元素。但在数值上比较元素会产生错误的结果:99、98、9、83、8、78等等 这是插件的问题还是我实现它的方式的问题 代码: jQuery.fn.sortElements=(函数(){ var sort=[].sort; 返回函数(比较器,getSortable){ getSortable=getSortable | | function(){返回this;}; var placements=this.map(函数(){ var sortlement=getSortable.cal

我用它来排序元素。但在数值上比较元素会产生错误的结果:99、98、9、83、8、78等等

这是插件的问题还是我实现它的方式的问题

代码:


jQuery.fn.sortElements=(函数(){
var sort=[].sort;
返回函数(比较器,getSortable){
getSortable=getSortable | | function(){返回this;};
var placements=this.map(函数(){
var sortlement=getSortable.call(this),
parentNode=sortElement.parentNode,
nextSibling=parentNode.insertBefore(
document.createTextNode(“”),
sortElement.nextSibling
);
返回函数(){
if(parentNode==此){
抛出新错误(
“如果任何一个元素是另一个的后代,则无法对其进行排序。”
);
}
parentNode.insertBefore(此,下一个sibling);
parentNode.removeChild(下一个sibling);
};
});
返回sort.call(this,comparator).each(函数(i){
placements[i].call(getSortable.call(this));
});
};
})();
$(文档).ready(函数(){
$('.item').sortElements(函数(a,b){
返回$(a).html()<$(b).html()?1:-1;
});
});

您正在比较字符串。在Javascript
“88”
“9”,但是(显然)
88>9
,或者(
+“88”>+“9”
)。您应该在比较函数中将字符串转换为数字:

return +$(a).html() < +$(b).html() ? 1 : -1;
return+$(a.html()<+$(b.html()?1 : -1;

如果要根据字符串的数值进行排序,请使用方法将字符串转换为数字

$('.item')。分类元素(函数(a,b){
返回parseInt($(a).html(),10)

(或对于浮点数,如注释中提到的Gaurav.。)

@GauravShah,应使用yes来支持十进制
parseFloat
。。我使用了所有整数的示例值。这只是对提问者的一个建议:)我想我疯了。为什么它不给我的十进制价格排序?我得到了这些荒谬的结果!?!因为它是按ASCII排序的。。JavaScript…-谢谢:)
return +$(a).html() < +$(b).html() ? 1 : -1;
$('.item').sortElements(function(a,b){
        return parseInt($(a).html(),10) < parseInt($(b).html(),10) ? 1 : -1;
    });