0

私のデータベースには、いくつかの「トピック」と「例」を保存しています。各例は1つのトピックに属しています。

常に一番上に表示したい1つのトピック(トピックC)を除いて、ツリーコンポーネントにASCという名前ですべてのトピックを表示したいと思います。ただし、これは後で変更される可能性があり、DBからのトピックと例の基本的なJSON出力は変更したくありません。

1)「順序付けされていないリスト」構造のクライアント側を生成することは合理的であると思われますか(または、すでにjson_encode()フェーズにあるので、順序が適切であることを確認する必要がありますか?)

2)その場合、1つの特定のトピックノードを名前でフィルタリングし、それをシーケンスの最初に配置するにはどうすればよいですか?

  • トピックC
  • トピックA
  • トピック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 に答える