Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery按数据属性排序_Jquery_Sorting_Custom Data Attribute - Fatal编程技术网

jQuery按数据属性排序

jQuery按数据属性排序,jquery,sorting,custom-data-attribute,Jquery,Sorting,Custom Data Attribute,我有一系列的div,我想根据价格、评级或alpha进行排序。alpha不是一个问题,但是为了实现数字排序,我尝试使用一个数据属性 示例代码如下: $(".btnSortP").click(function() { console.log("Clicked"); var divList = $(".listing"); divList.sort(function(a, b){ return $(a).data("price") - $(b).data("price"

我有一系列的div,我想根据价格、评级或alpha进行排序。alpha不是一个问题,但是为了实现数字排序,我尝试使用一个数据属性

示例代码如下:

$(".btnSortP").click(function() {
    console.log("Clicked");
    var divList = $(".listing");
    divList.sort(function(a, b){
    return $(a).data("price") - $(b).data("price")
});

$("#container").html(divList);
我无法让函数以正确的顺序返回父div。我制作了一把小提琴来演示这个问题


基于html的最佳方法是:

$(document).ready(function(){

    $(".btnSortP").click(function() {

        var divList = $(".listing");

        divList.sort(function(a, b){

            var result = parseFloat($(a).find('[data-price]').data('price'))- parseFloat($(b).find('[data-price]').data('price'));

            return result;
        });

        $("#container").html(divList);
    });
});

您可以很好地放置属性数据。span class=“price”中的数据price='499.99'必须为bi


感谢@Mohammad,我可以看到它是如何工作的,但是我使用data属性的原因是为了避免将数据重新添加进去。我不能仅仅根据转换成数字的数据值进行排序吗?@user2739763我更正了它。。我这么做是因为你所有的
.price
div都没有
数据price
attr。很抱歉,我后来注意到了这个错误。谢谢你的帮助!
  $(document).ready(function () {

    $(".btnSortP").click(function () {

        var divList = $(".listing");

        divList.sort(function (a, b) {

            var priceA=$(a).find('.price').data("price");
            var priceB=$(b).find('.price').data("price");
            //convert string to float
            priceA=parseFloat(priceA);
            priceB=parseFloat(priceB);

            return priceA > priceB
        });
        $("#container").html(divList);
    });
});