我正在使用一个电子商务平台,该平台无法重新排序产品属性字段的选项。这真的很糟糕,因为要插入新选项,您几乎必须删除所有现有选项并重新开始。我正在尝试在客户端进行操作。这是我正在处理的内容(这是针对鞋码的):
- 9 EE
- 9 1/2 EE
- 10 EE
- 10 1/2 EE
- 11 EE
- 11 1/2 EE
- 9 EEEE
- 9 1/2 D
- 9 1/2 电子电气设备
- 10 EEEE
- 10 1/2 EEEE
- 11 EEEE
- 9 D
- 11 1/2 EEEE
这些其实是一些人的文字<option>
s 以一种形式。值的格式是X Y Z
where:
-
X
是一个整数
-
Y
是字符串“1/2”并且可能不存在
-
Z
是字母代码,可以是“D”、“E”、“EEE”或“EEEE”,并且可能不存在
上面的期望顺序是这样的:
- 9 D
- 9 1/2 D
- 9 EE
- 9 1/2 EE
- 9 EEEE
- 9 1/2 电子电气设备
- 10 EE
- 10 1/2 EE
- 10 EEEE
- 10 1/2 EEEE
- 11 EE
- 11 1/2 EE
- 11 EEEE
- 11 1/2 EEEE
我已经了解了一些关于 javascript 的知识sort()
函数,但无法完全理解可以传递给它的比较函数是如何工作的。到目前为止我已经得到了这个:
<select>
<option>9 EE</option>
<option>9 1/2 EE</option>
<option>10 EE</option>
<option>10 1/2 EE</option>
<option>11 EE</option>
<option>11 1/2 EE</option>
<option>9 EEEE</option>
<option>9 1/2 D</option>
<option>9 1/2 EEEE</option>
<option>10 EEEE</option>
<option>10 1/2 EEEE</option>
<option>11 EEEE</option>
<option>9 D</option>
<option>11 1/2 EEEE</option>
</select>
我从这个答案中获取的代码开始:https://stackoverflow.com/a/667198/398242 https://stackoverflow.com/a/667198/398242
$("select").html($("option").sort(function (a, b) {
return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
}));
像这样对项目进行排序(甚至不适用于第一个标准):
- 10 1/2 EE
- 10 1/2 EEEE
- 10 EE
- 10 EEEE
- 11 1/2 EE
- 11 1/2 EEEE
- 11 EE
- 11 EEEE
- 9 1/2 D
- 9 1/2 EE
- 9 1/2 电子电气设备
- 9 D
- 9 EE
- 9 EEEE
我在 JavaScript 中看到了'11' > '9'
回报false
,这对我来说毫无意义。
MDN 描述了比较函数参数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort因此,我有点明白了:
function compare(a, b) {
if (a is less than b by some ordering criterion)
return -1;
if (a is greater than b by the ordering criterion)
return 1;
// a must be equal to b
return 0;
}
...但我不知道如何调整它以满足我的要求。我尝试了一些方法,但我感觉就像是在黑暗中拍摄。我试图表明我花了一些时间来尝试理解这个问题。我有兴趣了解更多信息,但现在我只想解决这个问题。
http://jsfiddle.net/DnwJ6/ http://jsfiddle.net/DnwJ6/有什么线索吗?