網路上幾乎沒有一個完整可用的方法,都是零零散散的,哎,自己碼代碼吧……
一、先獲取json數據(api返回數據或者sqllite本地數據庫查詢得出)
var datau = [{"username":"我","id":1},{"username":"不","id":5},{"username":"懂","id":2},{"username":"愛","id":11},{"username":"啊","id":6},{"username":"按","id":9}];
var pys = pySegSort(datau);
userdatas(datau,pys);
二、建立轉換大小寫、名稱首字母排序的方法並分組
//排序分組
function pySegSort(arr) {
if(!String.prototype.localeCompare){
return null;
}
// var letters = "*abcdefghjklmnopqrstwxyz".split('');
var letters = "*ABCDEFGHJKLMNOPQRSTWXYZ".split('');
var zh = "阿八嚓噠妸發旮哈譏咔垃痳拏噢妑七呥扨它穵夕丫帀".split('');
var segs = [];
var curr;
letters.forEach(function(item,i){
curr = {letter: item, data:[],datas:[]};
arr.forEach(function(item2){
if((!zh[i-1] || zh[i-1].localeCompare(item2.username) <= 0) && item2.username.localeCompare(zh[i]) == -1) {
curr.data.push(item2.username);
curr.datas.push(item2);
}
});
if(curr.data.length) {
segs.push(curr);
curr.data.sort(function(a,b){
return a.localeCompare(b);
});
}
});
return segs;
}
三、使用多維循環實現頁面渲染
function userdatas(data,pys){
var table = document.body.querySelector('.mui-table-view');
var htmla=""; //一個字母創建一個 ,即可
var b=0;
for (var i = 0; i < pys.length; i++) {
htmla += '<li data-group='+pys[i].letter+' class="mui-table-view-divider mui-indexed-list-group">'+pys[i].letter+'</li>';
pys[i].datas.forEach( function(item){
var s=pinyin.getCamelChars(data[i].username)+"";//此方法爲 將返回的姓名 轉爲 大寫首字母縮寫 ,百度即可 如 李二 轉爲LR
var shouzimu=s.substr(0, 1); //此方法獲取 首字母 。
htmla += '<li data-value='+s+ 'data-tags='+s+' class="mui-table-view-cell mui-indexed-list-item">'+item.username+'</li>';
// console.log(item.id + '---' + item.username)
})
}
table.innerHTML = htmla;//要按照 字母順序添加 對應字母的 字符串即可
}
四、頁面需要首字轉換的js文件,在資源裏,直接去下載放進mui項目中就可以直接運行了。
五、希望可以幫助到後來人,以免入坑和浪費寶貴的青春……