1

我有一个表格,它在 1 列中显示来自动态内容的数据。当单元格数> 3时,我希望内容移动到第二列。(即,如果要显示 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'evaluation des clients”下面的表格.

再次感谢您提供的任何帮助,祝大家节日快乐!

4

4 回答 4

1

假设您使用标准表结构,首先我会将所有数据放入一列,无论有多少。然后我会动态移动它们:

编辑 这是您正在尝试做的工作示例。问题是你每行有两个 div 单元格,我以为你只有一个:

<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

请注意,这些表现在由classes而不是ids引用。另外,我想说我同意这个解决方案可以(也许应该)在服务器端处理,我只是在回答 OP 提出的问题......

于 2009-12-24T01:26:59.243 回答
0

我可能会在 PHP 中用这些数据构建一个 JSON 对象,而不是一开始就将其注入 DOM。这样,您就没有 javascript 重组 DOM 中现有数据的开销,它只是从头开始定位它。

于 2009-12-24T04:59:11.833 回答
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!),有效地浮动我们的 div,如下所示:

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 回答
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 回答