0

4x4、7x7、または 9x2 のような動的グリッドを使用してテーブルをミラーリングしようとしています。

私はこれを動的に作成します:

<table id="mainTable" class="mainClassTable" border="0" cellpadding="0" cellspacing="0">
 <tbody>
  <tr id="row-1">
    <td id="col-1" onclick="imgClick(this)">Stuff Here</td>
    <td id="col-2" onclick="imgClick(this)">Stuff Here</td>
    <td id="col-3" onclick="imgClick(this)">Stuff Here</td>
    <td id="col-4" onclick="imgClick(this)">Stuff Here</td>
  </tr>
  <tr id="row-2">
   <td id="col-1" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-2" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-3" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-4" onclick="imgClick(this)">Stuff Here</td>
  </tr>
  <tr id="row-3">
   <td id="col-1" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-2" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-3" onclick="imgClick(this)">Stuff Here</td>
   <td id="col-4" onclick="imgClick(this)">Stuff Here</td>
  </tr>
 </tbody>
</table>

col-1 を col-4 に移動し、col-2 を col-3 に移動するための各行の最良の方法は何でしょうか。そして、不均一な柱では、もっと複雑になるのではないかと心配しています.

行のシャッフルについて何かを見つけましたが、列をシャッフルしたいです。

jQueryセレクターを使用して退屈な各tdの位置を変更することを考えていますが、テーブルを再配置するための素晴らしいjqueryプラグインがあるかどうか疑問に思っています.

ドラッグ可能にしたくありません。ワンクリックでテーブルをミラーリングしたいだけです(コンテンツではありません)。

/編集
各列IDを一意にしようとしましたが、次のようなコードの山になりました。

function makeGrid(content, rowCount, colCount)
{   
//Empty TD string
tableVarSet = "";
//gridTotal = gridTotal - gridTotal;
//Loop for multiple columns
for (c=1;c<=colCount;c++)
    {
    //make column var
    tableVarSet = tableVarSet + makeColumns(content, c);
    }

//Loop for multiple rows
for (i=1;i<=rowCount;i++)
{
//Make new Row
    rowVarToAdd = "<tr id=TMPR>"+tableVarSet+"</tr>";

    $("#mainTable").append(rowVarToAdd);  
//Set new RowID
    rowName = "row-" + i;
    $("#TMPR").attr('id', rowName);

}
};

function makeColumns(content, count)
{

//Split String
tableVar1 = "<td id=col-"
tableNum = count;
tableVar2 = " onClick='imgClick(";
tableFunction = "this" ;
tableVar3 = ")'>"+content+"</td>";

//Combine Strings:
colVar = tableVar1 + tableNum + tableVar2 + tableFunction + tableVar3;
//Return result
return colVar;
};

それで、ええ、それはある程度機能しますが、おそらくはるかに簡単になる可能性があります. (何か案は?)

4

2 に答える 2

1

文字列を使用する代わりに、DOM 操作を検討してください。

var rows = document.getElementById("mainTable").rows, cells, fragment = document.createDocumentFragment();

for(var i = 0, len = rows.length; i<len; i++){ //Iterate over each row
    cells = rows[i].cells;
    for(var j = cells.length-1; j>=0; j--) {
        fragment.appendChild(cells[j]); //Remove the cells starting from the end and put them in a document fragment
    }
    rows[i].appendChild(fragment); //Append the fragment's contents to the current row
}

jsFiddle のデモ

于 2012-01-19T12:16:05.553 に答える
0

まず、同じ値を持つ複数の ID を使用しないでください。クラスを使用する必要があります。

次に、以下のコードは機能しますが、アプリケーションに合わせて変更する必要があります。

コンテンツをコピーしたくない場合は、各セルの html() 呼び出しを削除してください。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/javascript" language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>

<body>
<table id="test">
<tr id="row-1"><td class="col-1">col 1</td><td class="col-2">col 2</td><td class="col-3">col 3</td></tr>
<tr id="row-2"><td class="col-1">col 1</td><td class="col-2">col 2</td><td class="col-3">col 3</td></tr>
<tr id="row-3"><td class="col-1">col 1</td><td class="col-2">col 2</td><td class="col-3">col 3</td></tr>
</table>
</body>
<div id="mirror"></div>
<script type="text/javascript">
var table = $('#test');
var OUTPUT = '<table id="test">';
for (var i = 1; i <= $('#test tr').length; i++){
    OUTPUT += '<tr id="row-' + i + '">';
    OUTPUT += '<td class="col-1">' + $('#row-' + i + " .col-3").html() + '</td>' + "\n";
    OUTPUT += '<td class="col-2">' + $('#row-' + i + " .col-2").html() + '</td>' + "\n";
    OUTPUT += '<td class="col-3">' + $('#row-' + i + " .col-1").html() + '</td>' + "\n";
    OUTPUT += '</tr>';
};
OUTPUT += '</table>';
$('#mirror').html(OUTPUT);


</script>
</html>
于 2012-01-19T10:37:16.250 に答える