sort()按第一个数字排序数据,而不是整数

Zor*_*gan 2 javascript sorting jquery

我有一个排序方法,我想根据他们的data-position属性对我的div进行排序.目前,由于某种原因,该功能仅根据第一个数字而不是整数来对div进行排序.这是我的一个例子,html它表明:

HTML

<div class="parent" data-position="1">
    ...
</div>

<div class="parent" data-position="27">
    ...
</div>

<div class="parent" data-position="3">
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

这是js

$('body').on('click', '.new_comments', function(e) {
    var divArr = $(".parent");
    divArr.sort(function(a, b) {
        return $(a).attr('data-position') > $(b).attr('data-position') ? 1: -1;
    });
$(".comments_container").append(divArr);

});
Run Code Online (Sandbox Code Playgroud)

知道它为什么这样做以及如何解决它?

Tap*_*lar 5

$(a).attr('data-position')
Run Code Online (Sandbox Code Playgroud)

Attr将属性值作为字符串返回,因此您要比较字符串而不是数字,这是您所期望的.而不是使用attr()使用data().

$(a).data('position')
Run Code Online (Sandbox Code Playgroud)

两者之间的区别在于jQuery会尝试将属性中的值自动转换为数字(如果可以的话)data().因此,将值转换为数字,您应该看到您期望的排序.