【问题标题】:Sort div by span class按跨度类对 div 进行排序
【发布时间】:2013-03-29 22:54:45
【问题描述】:

编辑 我有这个在小提琴http://jsfiddle.net/gandjyar/HM67V/ 工作,但不能让它在小提琴之外工作......想法?

我有以下代码:

<div id="sort">
  <p>Sort Communities By: <a href="#">North</a> | <a href="#">South</a> | <a href="#">East</a> | <a href="#">West</a> | <a href="#">ALL</a>
  </p>
</div>
<div class="fp-floorplans">
  <div id="fp-link">
    <a href="#">Community 1</a>
  </div>
  <div id="wpcf-field-location" class="wpcf-field-checkboxes wpcf-field-location">
    <span class="wpcf-field-name wpcf-field-checkboxes wpcf-field-location-name">Loation:</span>
    <span class="wpcf-field-value wpcf-field-checkboxes-value wpcf-field-location-value">South</span>
  </div>
  <div id="wpcf-field-schools" class="wpcf-field-textfield wpcf-field-schools">
    <span class="wpcf-field-name wpcf-field-textfield wpcf-field-schools-name">School(s):</span> 
    <span class="wpcf-field-value wpcf-field-textfield-value wpcf-field-schools-value">Southwest</span>
  </div>
  <div id="wpcf-field-price-starting-at" class="wpcf-field-textfield wpcf-field-price-starting-at">
    <span class="wpcf-field-name wpcf-field-textfield wpcf-field-price-starting-at-name">Price Starting At:</span>
    <span class="wpcf-field-value wpcf-field-textfield-value wpcf-field-price-starting-at-value">$100's</span>
  </div>
</div>
<div class="fp-floorplans">
  <div id="fp-link">
    <a href="#">Community 2</a>
  </div>
  <div id="wpcf-field-location" class="wpcf-field-checkboxes wpcf-field-location">
    <span class="wpcf-field-name wpcf-field-checkboxes wpcf-field-location-name">Loation:</span>
    <span class="wpcf-field-value wpcf-field-checkboxes-value wpcf-field-location-value">East</span>
  </div>
  <div id="wpcf-field-schools" class="wpcf-field-textfield wpcf-field-schools">
    <span class="wpcf-field-name wpcf-field-textfield wpcf-field-schools-name">School(s):</span>
    <span class="wpcf-field-value wpcf-field-textfield-value wpcf-field-schools-value">Southeast</span>
  </div>
  <div id="wpcf-field-price-starting-at" class="wpcf-field-textfield wpcf-field-price-starting-at">
    <span class="wpcf-field-name wpcf-field-textfield wpcf-field-price-starting-at-name">Price Starting At:</span>
    <span class="wpcf-field-value wpcf-field-textfield-value wpcf-field-price-starting-at-value">$100's</span>
  </div>
</div>

我希望能够按北、南、东、西对“wpcf-field-location-value”进行排序,或者仅按升序对“wpcf-field-schools-value”进行排序。

我已尝试实施一些我发现但没有奏效的建议。 (Jquery - sort DIV's by innerHTML of childrenSorting divs by number inside div tag and jQuery

【问题讨论】:

  • 如果您使用 jQuery,Jquery - sort DIV's by innerHTML of children 会回答您的问题。
  • 全部排序?您是否将排序与过滤混淆了?
  • Aiias,我确实检查了该问题并让它在小提琴中运行,但无法让它在小提琴之外运行.. 想法为什么?
  • @icktoofay 我开始想要过滤,但认为排序会更容易。

标签: javascript jquery


【解决方案1】:

首先:您的 html 中不能有相同的 id 值。您可以通过给它 data-id 来添加用户属性。整个文档的 id 属性值必须是唯一的。

由于北、南、东、西没有按字母顺序排列,因此您需要将它们替换为另一个值。

使用此处提供的代码(有一些修改):Jquery - sort DIV's by innerHTML of children

var direction={north:0,south:1,east:2,west:3}
function sortOn(primary){
  primary=primary.toLowerCase();
  for(item in direction){
    if(direction[item]===0){
      break;
    }
  }
  var tmp=direction[primary];
  direction[primary]=0;
  direction[item]=tmp;
    var items = $(".fp-floorplans").sort(function(a, b) {
        var vA = $(a).find("wpcf-field-location-value").text().trim().toLowerCase();
        var vB = $(b).find("wpcf-field-location-value").text().trim().toLowerCase();
        if(directions[vA]===directions[vB]){
          //secondary search
          vA = $(a).find("wpcf-field-schools-value").text().trim().toLowerCase();
          vB = $(b).find("wpcf-field-schools-value").text().trim().toLowerCase();
          return (vA < vB) ? -1 : (vA > vB) ? 1 : 0;
        }
        // primary searh (a and b cannot be the same)
        return (vA < vB) ? -1 : 1;
    });
}

sortOn("west");

要更改顺序的优先级(如西优先),您可以在排序前更改方向变量: 方向={北:3,南:1,东:2,西:0}

首先您需要查看当前包含 0 的值,然后将其替换为新的 on。

【讨论】:

  • 这允许您对“北优先”或“西优先”进行排序,但如果我也想对它们进行“南优先”排序呢?
  • 不确定你的意思。您希望学校价值的二次搜索不按字母顺序排列吗?
  • 啊,我明白了。问题是排序:东北,西北,东南,西南(二级排序)。但只是在字母表上。这就是脚本的作用。如果您希望辅助排序使用替换值来排序,那么您应该首先指定您希望它们的顺序。
  • 更新了代码,所以它会根据你给它的任何参数(南、西、东、北)进行排序
猜你喜欢
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 2015-06-30
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多