在我的数据库中,我存储了许多“主题”和“示例”。每个示例都属于一个主题。
我想在树组件中按名称ASC显示所有主题,除了一个主题(主题C)我总是想要在顶部。这可能会稍后改变,我宁愿不从DB更改主题和示例的基本JSON输出。
1)生成“无序列表”结构客户端是否合理(或者我应该在json_encode()阶段确保订单合适吗?)和
2)在这种情况下,我如何按名称过滤一个特定主题节点并将其放在序列中?
答案 0 :(得分:0)
如果不明白你正在做这件事的原因,你的问题很难回答!
无论如何,在试图回答时, 1):
如果您要在服务器上以HTML格式生成列表,并且列表的顺序不会改变,为什么要使用JSON& JavaScript的?使用服务器端技术来执行此操作。
如果列表发生变化,并且您希望客户端UI中的某些内容管理列表的顺序,并且您有可访问性注意事项:使用服务器端技术创建列表和JSON,请订购服务器端然后呈现您的HTML列表并将您的JSON传递给客户端。这将使列表在未启用JavaScript的情况下可供客户端(用户)使用,并且启用JavaScript的客户端可以使用“可排序列表”。
如果您对没有JavaScript的用户没有任何顾虑并且列表需要可重新排序,那么只需将您的JSON数据传递给您的客户端并使用JavaScript来呈现它并处理重新排序。
2)我假设您要排序的每个对象都在一个数组中?如果是,那么我将使用Array.sort方法:www.w3schools.com/jsref/jsref_sort.asp
以下内容应该让您了解如何执行此操作:
var data = [{
"Topic" : "C",
"Examples":[
{"Example" : "Example A one"},
{"Example" : "Example A two"},
]
},{
"Topic" : "B",
"Examples":[
{"Example" : "Example B one"},
{"Example" : "Example B two"},
]
},{
"Topic" : "A",
"Examples":[
{"Example" : "Example C one"},
{"Example" : "Example C two"},
]
}];
function sortTopics(topics, firstItem){
var sortedArray = [];
for (var i = 0; i < topics.length; i++) {
if (topics[i].Topic == firstItem) {
//add the specified first item
sortedArray.push(topics[i]);
//remove element from original
topics.splice(i,1);
break;
}
}
//sort the remainder of the array
topics.sort(function(a,b){
if(a.Topic < b.Topic){return -1;}
if(a.Topic > b.Topic){return 1;}
return 0;
});
//loop though and add each item to the new array
for (var i = 0; i < topics.length; i++) {
sortedArray.push(topics[i]);
}
return sortedArray;
}
sortTopics(data, "C");
我不确定它是如何跨浏览器的,显然你需要从JSON生成列表,但它应该给你一个开始的地方,你当然可以使它更通用和高效!
祝你好运。