基于元素的数据属性对div进行排序

Mee*_*eek 2 sorting jquery

我需要能够根据子元素的data-price属性对div列表进行排序.这是我的标记:

<div class="container">
  <div class="terminal" data-price="195">
      <h3>195</h3>
  </div>
  195 - I should come in 2nd.
</div>

<div class="container">
  <div class="terminal" data-price="220">
      <h3>220</h3>
  </div>
  220 - I should come in 3rd.
</div>

<div class="container">
  <div class="terminal" data-price="130">
      <h3>130</h3>
  </div>
  130 - I should come in 1st.
</div>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的脚本:

function sorter(a, b) {
    return a.getAttribute('data-price') - b.getAttribute('data-price');
};
$(document).ready(function () {
        var sortedDivs = $(".terminal").toArray().sort(sorter);
        $.each(sortedDivs, function (index, value) {
            $(".container", this).html(value);
            //console.log(value);
        }); 
});
Run Code Online (Sandbox Code Playgroud)

结果应该替换现有的标记.我无法上班.需要改变什么?

这是一个小提琴.

Yos*_*shi 11

以下应该有效:

$('.container').sort(function (a, b) {
  return $(a).find('.terminal').data('price') - $(b).find('.terminal').data('price');
}).each(function (_, container) {
  $(container).parent().append(container);
});
Run Code Online (Sandbox Code Playgroud)

虽然我建议不要在没有共同父母的情况下这样做.$(container).parent().append(container);如果存在其他子节点,则该部分可能存在问题.

演示:http://jsbin.com/UHeFEYA/1/


或者你可以这样做:

$('.terminal').sort(function (a, b) {
  return $(a).data('price') - $(b).data('price');
}).map(function () {
  return $(this).closest('.container');
}).each(function (_, container) {
  $(container).parent().append(container);
});
Run Code Online (Sandbox Code Playgroud)