0

不确定,为什么它不起作用。我参考了一堆堆栈溢出的答案,但似乎没有什么不同。我只是想通过 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;
})
4

1 回答 1

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));

再次感谢疯狂的火车:)

于 2013-08-02T21:31:24.650 回答