HTMLのliタグを文字列によって並び替えることができるTinySortを使用しております。
これを使うと例えば下記のような並びがあったとき、
HTML
1<ul> 2 <li>ZZZ</li> 3 <li>AAA</li> 4 <li>DDD</li> 5</ul> 6 7<!--並び替えを実行すると↓--> 8 9<ul> 10 <li>AAA</li> 11 <li>DDD</li> 12 <li>ZZZ</li> 13</ul>
という具合に50音順で並び替えることができます。
ところが下記のリストを並び替えようとしてもうまく並び替えてくれません。
HTML
1<ul> 2 <li>9月</li> 3 <li>8月</li> 4 <li>10月</li> 5</ul> 6 7<!--並び替えを実行すると↓--> 8 9<ul> 10 <li>10月</li> 11 <li>8月</li> 12 <li>9月</li> 13</ul>
TinySortのページの「sorted numbers」(=ソートされた数字)項目を参照するに、1桁数字も2桁数字も自然な並びになるように並び替えてくれるようですが、上記「10月」などのように後ろに文字が付くと、0〜9の並びを機械的に判断して並び替えてしまうようです。
これを「8月」「9月」「10月」と並び替えられるようにしたいのですが、どういじったらいいものか見当がつきません。
TinySortのオプションにある「options.natural」(自然なソート順)をtrueにしてみましたが変わりませんでした。またtinysort.charorder.js内にある下記コード部分の一番下の行、ここが並び替えの順序を指定している気がするところで、試しに「0-9」「0-999」などと入れてみましたが全く変わりませんでした。
上記お分かりになる方がいらっしゃいましたらお知恵拝借させていただければと思います。
JavaScript
1 var fromCharCode = String.fromCharCode // minify placeholder 2 ,mathmn = Math.min // minify placeholder 3 ,nll = null // minify placeholder 4 ,fnIndexOf = Array.prototype.indexOf// minify placeholder 5 ,plugin = tinysort.plugin 6 ,loop = plugin.loop 7 // 8 ,charOrder // equals the input oSettings.charOrder so we can test any changes 9 ,allCharsList = (function(a){ // all latin chars 32-255 10 // using lowerCase instead of upperCase so _ will sort before 11 for (var i=32,s=fromCharCode(i),len=255;i<len;i++,s=fromCharCode(i).toLowerCase()) { 12 if (fnIndexOf.call(a,s)===-1) a.push(s); 13 } 14 return a.sort(); 15 })([]) 16 ,orderedCharlist // similar to sAllChars but with the changed char order 17 ,replacementIndex = 0x2500 // doubles are replaced with Unicode char starting at 0x2500 18 ,replacements = {} // replacement object // todo: reset? 19 ,regexNonLatin = /[^a-zA-Z]/g // ← 並び替え順序を指定していると思われる箇所 20

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/30 10:26
2018/11/30 10:37
2018/11/30 10:38
2018/11/30 11:24
2018/12/07 01:09
2018/12/07 02:23
2018/12/07 02:24
2018/12/07 02:30 編集
2018/12/07 02:32
2018/12/07 02:34
2018/12/07 02:35
2018/12/07 02:38