0

在我的数据库中,我存储了许多“主题”和“示例”。每个示例属于一个主题。

我想在树组件中按名称 ASC 显示所有主题,除了一个我总是想要在顶部的主题(主题 C)。不过这可能会在以后发生变化,我宁愿不更改数据库中主题和示例的基本 JSON 输出。

1)生成“无序列表”结构客户端是否合理(或者我应该已经在 json_encode() 阶段确保顺序合适?)和

2)在这种情况下,我将如何按名称过滤一个特定的主题节点并将其放在序列中的第一位?

  • 主题 C
    • 例子
    • 例子
  • 主题一
    • 例子
    • 例子
  • 主题 B
    • 例子
    • 例子
4

1 回答 1

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 生成列表,但它应该给你一个开始的地方,你当然可以让它更加通用和高效!

祝你好运。

于 2009-12-02T16:51:00.640 回答