根据data-sort属性对Div进行排序

时间:2013-08-02 20:56:52

标签: javascript jquery sorting search append

不确定,为什么它不起作用。我引用了一堆堆栈溢出答案,但似乎没有任何区别。我只是想通过data-sortStart属性用class =“searchMe”对所有div进行排序。 data-sortStart部分工作正常,所以我在这个例子中没有包含该函数,但它基本上是一个for循环,它为循环中的每个连续div提供了一个+ = 1的data-sortStart。

这是我的代码:

$("#search_button").on("click", function() {
  appendicize($('.searchMe').sort(reSort));
});

function appendicize(el){
  var container = $('#whatWhat');
      container.html('');
  el.each(function(){
    $(this).appendTo(container);
  });
}

$('.searchMe').reSort(function (a, b) {
  var contentA = $(a).attr('data-sortStart'),
      contentB = $(b).attr('data-sortStart');
  return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
})

1 个答案:

答案 0 :(得分:0)

Crazy Train指出的解决方案如下:

$(#search_button).click(function() {
  appendicize($('.searchMe').sort(reSort));
});

function appendicize(el){
  var container = $('#whatWhat');
      container.html('');
  el.each(function(){
    $(this).appendTo(container);
  });
}

function reSort(a, b) {
  var contentA = +$(a).attr('data-sortStart'),
      contentB = +$(b).attr('data-sortStart');
  return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
}

在reSort函数中的变量初始值设定项之前添加'+'将正确地将data-sortStart属性比较为整数而不是字符串(字符串10小于2)这解释了为什么我得到元素#10和#11排在#2元素之上。最初也没有调用reSort函数,因为我的编写方式如下:

$('.searchMe').reSort(function (a, b) {

而不是像这样:

function reSort(a, b) {

第一种方式是不必要的,因为当我调用函数时,我已经在上面传递了$('。searchMe'):

appendicize($('.searchMe').sort(reSort));
再次感谢疯狂的火车:)