![](/img/trans.png)
[英]Using jQuery or javascript to render json into multi-column table
[英]Sort multi-column list alphabetically/by date without using a table in HTML/javascript/jQuery as Dropbox has done
我想在不使用表的情况下对多列列表进行排序。 我知道单列列表的解决方案,但我似乎找不到一个在多个UI /列上排序,同时保持列表/行项目在一起。
最后,我想做一些类似于Dropbox为显示文件所做的事情。 是的,Dropbox不使用可排序表。 这是一个列表,而不是tr与一堆div而不是td的。
我不想使用表格,因为表格会让我为造型目的而疯狂。 另外,我不想使用插件(如tablesorter.js),因为javascript有一个内置的sort()函数,所以它不能是那么多行代码。
无论如何,这是一个很好的单列演示,取自另一个SO问题,以及原始的SO参考 。
基本上我想做小提琴里的东西但是能够按名字排序,例如地址,这里是一个小提琴,建立在这个第一个小提琴上,你可以看到我想去哪里用这个http:// jsfiddle .net / trpeters1 / De8Ku / 955 / 。 正如您将注意到的,这个小提琴无法根据我想要找到解决方案的地址进行排序。
更新非常感谢eterps(见下文),现在小提琴可以按多列排序。 我现在想接下来包括按日期排序。 这是一个小提琴,试图尝试,但不是很有效。 你会注意到我试图将innerHTML转换为Date()对象,但这并没有解决这个问题。 http://jsfiddle.net/trpeters1/De8Ku/983/
在这个小提琴中,有人可以帮助解释为什么日期的排序仍然只是字母/数字而不是日期?
使用您在jsFiddle示例中提供的代码,您可以向span标记添加一些标识信息,以将文本区分为列。 然后,您可以使用该信息进行排序。 我更改了jsFiddle示例以使用排序函数来查看指定的列。 我确信有更优雅的方法可以做到这一点,但它应该让你开始。
http://jsfiddle.net/De8Ku/976/
这是代码,以防jsFiddle不工作或有人想编辑这个答案:
HTML:
<input type="button" id="test" value="sort by names"/>
<input type="button" id="test1" value="sort by address"/>
<ul id="list">
<li ><span class="name">peter</span><span class="address"> 812 jones st.</span></li>
<li><span class="name">zack</span><span class="address"> 512 jones st.</span></li>
<li><span class="name">alex</span><span class="address"> 712 jones st.</span></li>
<li><span class="name">sue</span><span class="address"> 112 jones st.</span></li>
<li><span class="name">jenny</span><span class="address"> 912 jones st.</span></li>
</ul>
JS:
function sortUnorderedList(ul, sortDescending, sortClass) {
if (typeof ul == "string") {
ul = document.getElementById(ul);
}
var lis = ul.getElementsByTagName("LI");
var vals = [];
// Instead of filling an array with list items,
// create an array of objects that contain the list item itself,
// and the value from the sort-by column
for (var i = 0, l = lis.length; i < l; i++) {
vals.push({
sortFieldVal: lis[i].getElementsByClassName(sortClass)[0].innerText,
val: lis[i].innerHTML
});
}
// Use a sort function to compare string values of sortFieldVal for each item
vals.sort(function(a, b) {
var nameA=a.sortFieldVal.toLowerCase(), nameB=b.sortFieldVal.toLowerCase()
if (nameA < nameB) //sort string ascending
return -1
if (nameA > nameB)
return 1
return 0 //default return value (no sorting)
});
if (sortDescending) vals.reverse();
for (var i = 0, l = lis.length; i < l; i++)
lis[i].innerHTML = vals[i].val;
}
window.onload = function() {
var desc = false;
document.getElementById("test").onclick = function() {
sortUnorderedList("list", desc, "name");
desc = !desc;
return false;
}
document.getElementById("test1").onclick = function() {
sortUnorderedList("list", desc, "address");
desc = !desc;
return false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.