查找匹配项并按匹配排序,然后按字母顺序排列

时间:2015-05-12 16:09:59

标签: javascript jquery sorting

到目前为止代码

function sort(a, b) {
var at = jQuery(a).text();
var bt = jQuery(b).text();
console.log(at.indexOf(match));
if (at.indexOf(match) >= 0 && bt.indexOf(match) < 0) {
    return -1;
}
return (bt < at) ? 1 : -1;
}

var match = "Мебельное производство";
jQuery(".orderings tr").sort(sort).appendTo('.orderings');

可以通过“Мебельноепроизводство”返回所有比赛, 我想在下一个方向返回比赛

var match = "Мебельное производство, Строительство";

返回'Мебельноепроизводство'的所有比赛以及'Строительство'的比赛,然后按字母顺序返回。

3 个答案:

答案 0 :(得分:1)

这是一个将匹配字符串的排序考虑在内的版本。

function sort(a, b) {
  var matches = match.split(/,\s*/);
  var at = jQuery(a).text();
  var bt = jQuery(b).text();

  for (var i = 0; i < matches.length; ++i) {
    var m = matches[i];
    
    if (at.indexOf(m) >= 0 && bt.indexOf(m) < 0) {
      return -1;
    } else if (bt.indexOf(m) >= 0 && at.indexOf(m) < 0) {
      return 1;
    }
  }
  return (bt < at) ? 1 : -1;
}

var match = "Мебельное производство, Строительство";
jQuery(".orderings tr").sort(sort).appendTo('.orderings');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<table class="orderings">
  <tr>
    <td>Мебельное производство</td>
  </tr>
  <tr>
    <td>Neither</td>
  </tr>
  <tr>
    <td>Строительство</td>
  </tr>
  <tr>
    <td>Neither</td>
  </tr>
  <tr>
    <td>Another Мебельное производство</td>
  </tr>
</table>

答案 1 :(得分:0)

如果我理解你想做什么,你可以分割字符串并使用forEach:

var matches = match.split(", ");

matches.forEach(function(value,index,array){
      value.sort(a,b);
});

答案 2 :(得分:0)

这应该这样做,ymmv:

function hasText(t)
{
    return this.indexOf(t) >= 0;
}

function sort(a, b) 
{
  var at = jQuery(a).text(),
  bt = jQuery(b).text(),
  matches = match.split(/, /);
  // determine whether a or b has at least one match
  var p = matches.some(hasText, bt) - matches.some(hasText, at);

  return p ? p : at.localeCompare(bt);
}

Demo

另请参阅:Array.prototype.some()