1

動的コンテンツからのデータを1列に表示するテーブルが1つあります。セル数が3を超える場合は、コンテンツを2列目に移動してほしい。(つまり、表示するセルが3つある場合は、1列で表示され、4セル以上の場合は2列で表示されます。動的コンテンツが6セルを超えることはないことに注意してください。

私はcssとhtmlで自分の道を見つけることができると言わなければなりませんが、javascriptは別の問題です...しかし私はそれが唯一の方法かもしれないことを理解しています。

結果を取得するために利用できるJavascript、jQueryスクリプトはありますか?

次のように表示されるデータ:

| Col1  |          | Col1  || Col2  |
---------          -----------------
| Data1 |   ---->  | Data1 || Data4 |
| Data2 |          | Data2 | etc...
| Data3 |          | Data3 |

これが役立つかどうかはわかりませんが、動的コンテンツを要求する(そしてそれをテーブルに配置する)コードは次のとおりです。

<table id="myTable">
                  <?php
     $str1="";
     $flag1=1;
     while($rowReview1=mysql_fetch_array($resultReview1)){
      $st1="";
      $val=$rowReview1["ratingValue"];
      $sName=$rowReview1["criteriaName"];

      if($val>0){

       for($ii=1;$ii<=$val;$ii++){
        $st1.="<img src=\"$directory/images/orange.gif\" \>";
       }

       for($jj=$val;$jj<5;$jj++){
        $st1.="<img src=\"$directory/images/gray.gif\" \>";
       }
      }else{
       $st1="";
      }

      if($val > 0){
       $str1.="<tr><td>$sName</td><td>$st1</td></tr>";
      }else{
       $str1.="<tr><td>$sName</td><td>N/A</td></tr>";
      }
     }
     echo $str1;
    ?>
                </table>

このページはここでライブで見ることができます:http://www.top10banques.com/avis/index2.php? item_id = 1私が編集しようとしているテーブルは、ページ分割「l'evaluationdesclients」の下にあるテーブルです。 。

あなたが提供できるどんな助けとすべての人にハッピーホリデーをありがとう!

4

4 に答える 4

1

標準のテーブル構造を使用していると仮定すると、最初に、データの数に関係なく、すべてのデータを1つの列に配置します。次に、それらを動的に移動します。

編集 これはあなたがやろうとしていることの実用的なサンプルです。問題は、行ごとに2つのdivセルがあることでした。1つしかないと思いました。

<html>
<head>
   <script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
   </script>
</head>
<body>
    <script type="text/javascript">
      $(function(){
 var allRows = $('#myTable tr');
if(allRows.length > 3) {
   var extraData = $('#myTable tr:gt(2) td')
   var j = 0;       
   for (i=0;i<extraData.length/2;i++) { 
       $(allRows[i]).append(extraData[j])
       $(allRows[i]).append(extraData[j+1])
       j=j+2;
   }
   $('#myTable tr:gt(2)').remove();
}
});
</script>

<table id="myTable">
<tr><td>Data1</td><td>Data11</td></tr>
<tr><td>Data2</td><td>Data21</td></tr>
<tr><td>Data3</td><td>Data31</td></tr>
<tr><td>Data4</td><td>Data41</td></tr>
<tr><td>Data5</td><td>Data51</td></tr>
<tr><td>Data6</td><td>Data61</td></tr>
</table>

</body>
</html>

上記の解決策は、正確な仕様に対してのみ機能することに注意してください。これを再利用可能にしたい場合(つまり、任意の数のセルで任意の数の行を取得する場合)、追加の調整が必要になる場合があります。


複数のテーブルの作業更新

ここでPastieに投稿したコードを参照してください:http://pastie.org/755963

テーブルがIDではなくクラスによって参照されるようになったことに注意してください。また、このソリューションはサーバー側で処理できる(そしておそらくそうすべきである)ことに同意します。OPが尋ねた質問に答えているだけです...

于 2009-12-24T01:26:59.243 に答える
0

最初はすべてDOMに挿入するのではなく、PHPでこのデータを使用してJSONオブジェクトを作成する可能性があります。このように、DOM内の既存のデータを再構築するjavascriptのオーバーヘッドがなく、データを最初から配置するだけです。

于 2009-12-24T04:59:11.833 に答える
0

私はこれがCSSを使用して簡単だと思っていたでしょう(しかし私はCSSの専門家ではありません)。

このようなものは、PHPのより一般的なケースを扱います。

   function multi_columns($inp_array)
   {
    $max_cols=4;
    $target_rows=3;

    if (count($dyn)>$max_cols*$target_rows) {
      // won't fit in this number of cols/rows
      // add more rows
      $rows=count($dyn)/$max_cols;
      $target_rows= ($rows==(integer)$rows) ? $rows : $rows+1;
    } elseif (count($dyn)>$max_cols*$target_rows) {
      // reduce to number of cols needed
      $cols=count($dyn)/$target_rows;
      $max_cols= ($cols==(integer)$cols) ? $cols : $max_cols;
    }

    print "<table>\n";
    for ($y=1; $y<=$target_rows; $y++) {
       print "<tr>\n";
       for ($x=1; $x<=$max_cols; $x++) {
            print "<td>";
            if (array_key_exists($y+$x*$target_rows, $inp_array)) {
               print $inp_array[$y+$x*$target_rows];
            }
            print "</td>";
       }
       print "</tr>\n";
    }
    print "</table>\n";
   }
于 2009-12-24T11:09:30.243 に答える
0

この問題はサーバーで解決され、JavaScriptスクリプトを削除することでページのパフォーマンスを向上させる必要があります。

第二に、テーブルではなくdivを使用することで、生活を簡素化できます。

まず、提案されたデータ構造を見てみましょう。PHPを使用しているため、すべての出力を配列に保持します。

$data=array[0...n];

これは単にビジネスロジックの生成を分類するだけです。

次に、プレゼンテーションロジックを見てみましょう。まず、提案されたdivを視覚的に見てみましょう。

$ data_length = m

    j=0   j=1   j=2   j=3   .....   j= x

i=0 [1]    [4]    [7]    [10]       []

i=1 [2]    [5]    [8]    [11]       []

i=2 [3]    [6]    [9]    [12]       []

 y   []     []    []     []         []

すべてのdivは左にフロートされます。行が完了すると、クリアリングdivが出力されます。

次に、データと位置の関係を定義する必要があります。表を少し観察すると、すべての水平位置の値が3で区切られ、すべての垂直位置の値が1で区切られていることがわかります(つまり、配列$ dataを3ステップで繰り返す必要があります!)。

j=0   j=1   j=2   j=3   .....   j= x

i=0 [1]    [4]    [7]    [10]   []

疑似アルゴリズム

 $imax=2;                     // spec
 $number_cells = m/imax       // total number of cells
 $jmax=$number_cells/3        // check rounding etc left out at this stage
                              // you can use mod % to see if there are 
                              // remainders etc.. on second script iteration

そして今、反復のために

 for ($i=0;$i<$imax-1;$i++){
     for ($j=0;$j<$jmax;$j++){
        $out.=wrap_in_div($data[($j*3)+(i+1)]);
     }
 }

wrap_in_divささいなこととして関数のレイアウトを定義することをわざわざしていないことに注意してください。

それがメリークリスマスに役立つことを願っています!プログラムが頭から離れていたので、擬似コードを実際の$に変換してください!:)

于 2009-12-24T19:23:15.973 に答える