No.6ベストアンサー
- 回答日時:
こんばんは
HTML・CSSのカテですけれど、HTMLということで良いのでしょうか?
>行数が増えてきて先頭行をクリックするのがしんどくなってきたので、
普通は、タイトル行を固定するような方法を取ると思いますけれど・・
(タイトルのthを position: sticky; で常時表示しておくなど)
どうしてもご質問のようになさりたければ・・
>先頭行(タイトル行)をクリックしたときにソートできるようにしていたのですが~
現状の実装方法が不明ですけれど、想像するところスクリプトで実装しているものと推測します。
多分クリックイベントを拾っているのでしょうから、それをテーブル全体に広げれば済む話と思います。
例えば、
Table要素.addEventListener('click', e => {
const c = e.target, n = c.nodeName;
if(n != 'TD' && n != 'TH') return;
const m = c.cellIndex;
・・・・・
などとすれば、変数 m にクリックした列番号(=0始まり)を得られますので、後の処理は現状の処理と同様に行えば良いでしょう。
※ 意味を取り違えていましたら失礼。スルーしてください。
カテは迷いつつも、やはりここが最適と判断しました。
position: stickyすばらしい!
この1文で求めていた事以上の効果を得ました。
つまり、いつでもタイトル行が目に入るオマケを得ました。
ご教示いただいたクリックイベントのコードは、まさに私が当初求めていたコードですが、position: stickyの方が単純明快で、しかもオマケ付きなので、こちらを採用させていただきました。
No.7
- 回答日時:
zyousuke さん
・・・・列中のどこをクリックしてもソートするサンプルコード・・・・・・・・・
先頭行以外をクリックしたときに列をソートするサンプル。↓
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<style>
#sort_table {
border-collapse:collapse;
}
#sort_table td {
border:1px solid lightgray;
}
#sort_table th {
cursor:pointer;
background-color:lightgray;
}
</style>
</head>
<body>
<table id="sort_table">
<tr>
<th>No</th>
<th>全角項目</th>
<th>数値項目</th>
<th>カンマ</th>
</tr>
<tr><td>1</td><td>かきくけこ</td><td>1</td><td>1,000</td></tr>
<tr><td>2</td><td>さしすせそ</td><td>10</td><td>10,000</td></tr>
<tr><td>3</td><td>あいうえお</td><td>100</td><td>2,000</td></tr>
<tr><td>4</td><td>カキクケコ</td><td>2001</td><td>3,000</td></tr>
<tr><td>5</td><td>アイウエオ</td><td>2002</td><td>20,000</td></tr>
<tr><td>6</td><td>サシスセソ</td><td>2003</td><td>11,000</td></tr>
<tr><td>7</td><td>一丁目</td><td>1.234</td><td>12,000</td></tr>
<tr><td>8</td><td>二丁目</td><td>12.34</td><td>30,000</td></tr>
<tr><td>9</td><td>三丁目</td><td>123.4</td><td>31,000</td></tr>
<tr><td>10</td><td>1丁目</td><td>0.001</td><td>32,000</td></tr>
<tr><td>11</td><td>2丁目</td><td>0.002</td><td>400,000</td></tr>
<tr><td>12</td><td>3丁目</td><td>0.003</td><td>50</td></tr>
</table>
<script>
let column_no = 0; //今回クリックされた列番号
let column_no_prev = 0; //前回クリックされた列番号
window.addEventListener('load', function () {
document.querySelectorAll('#sort_table td').forEach(elm => {
elm.onclick = function () {
column_no = this.cellIndex; //クリックされた列番号
let table = this.parentNode.parentNode.parentNode;
let sortType = 0; //0:数値 1:文字
let sortArray = new Array; //クリックした列のデータを全て格納する配列
for (let r = 1; r < table.rows.length; r++) {
//行番号と値を配列に格納
let column = new Object;
column.row = table.rows[r];
column.value = table.rows[r].cells[column_no].textContent;
sortArray.push(column);
//数値判定
if (isNaN(Number(column.value))) {
sortType = 1; //値が数値変換できなかった場合は文字列ソート
}
}
if (sortType == 0) { //数値ソート
if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
sortArray.sort(compareNumberDesc);
} else {
sortArray.sort(compareNumber);
}
} else { //文字列ソート
if (column_no_prev == column_no) { //同じ列が2回クリックされた場合は降順ソート
sortArray.sort(compareStringDesc);
} else {
sortArray.sort(compareString);
}
}
//ソート後のTRオブジェクトを順番にtbodyへ追加(移動)
let tbody = this.parentNode.parentNode;
for (let i = 0; i < sortArray.length; i++) {
tbody.appendChild(sortArray[i].row);
}
//昇順/降順ソート切り替えのために列番号を保存
if (column_no_prev == column_no) {
column_no_prev = -1; //降順ソート
} else {
column_no_prev = column_no;
}
};
});
});
//数値ソート(昇順)
function compareNumber(a, b)
{
return a.value - b.value;
}
//数値ソート(降順)
function compareNumberDesc(a, b)
{
return b.value - a.value;
}
//文字列ソート(昇順)
function compareString(a, b) {
if (a.value < b.value) {
return -1;
} else {
return 1;
}
return 0;
}
//文字列ソート(降順)
function compareStringDesc(a, b) {
if (a.value > b.value) {
return -1;
} else {
return 1;
}
return 0;
}
</script>
</body>
</html>
querySelectorAll()で全ての要素を取ってこれるのですね。
しかし、fujillinさんのTable自体にイベントリスナーを追加する書き方の方が、ループが不要なので、そちらに軍配か。
コンマ区切りの書式を数と見なすには、もうひと手間必要そうです(環境によるか?)。
No.5
- 回答日時:
>>しかし、あえてこの難題に挑戦するとしたら、どのようなコードを書きますか。
エクセルでは、ヘッダー部を固定して明細部のみをスクロールできたと思います。なので、同じような仕様として、テーブルの先頭行(タイトル行)を表示させ続ける仕様にすればいいのではないでしょうか?
目指すべき方向性が見えて参りました。
引き続き先生方の助言をお待ちしています。
ところで、ページ中にテーブルが3個あり、今回はテーブル2を操作しようとしています。
ーーーーーーーーー
テーブル1
あいうえお
テーブル2
かきくけこ
テーブル3
ーーーーーーーーー
なんだか難そうです・・・
No.4
- 回答日時:
エクセルでは、行を選択してから非表示ではなくて、グループ化した方が、後で左側に表示される拡大縮小でできたと思います。
ただ、先頭行にソートの機能が残っているかどうかは、してみないと判断できません。
私のエクセルは古すぎて、行のグループ化の手順が良く分かりませんでした。
しかし今回はウェブのテーブルを操作する方法を聞きに参りました。
その件についてご存知でしたら、ご教示ください
m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 空白行も含めてソートしたい 3 2022/02/01 23:13
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) excel 行でソートすると計算式が上手くいかない。 6 2022/06/01 08:18
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Windows 10 Microsoftアカウントでログインできなくなった場合の対処を教えてください 1 2023/03/03 15:45
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
文字列をソートする方法
-
リスト構造のソートで悩んでま...
-
構造体配列の並べ替え
-
excel VBA の条件をつけての列...
-
DataGridViewでのソート制御
-
DataGridViewのソートを止めたい
-
DataGridView の sort
-
VBA基本構文の作り方 2列の...
-
qsortについて
-
DataGridViewで選択行が変わる...
-
VB6でデータを昇順に並べ替える
-
構造体のリストをソートしたい。
-
ファイル名「1.jpg ~10.jpg~...
-
C言語・要素除去
-
listboxの並び替え
-
vbでDataTableの抽出コピー
-
C# DataTableの行をソートしてD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
あるディレクトリ内のファイル...
-
C言語・要素除去
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
C言語でアナグラムを求めるプロ...
-
2次元配列を複数項目でソートし...
-
C# DataTableの行をソートしてD...
-
DataGridViewソート時に先頭行...
-
n番目に大きい数を求めるアル...
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
配列の問題
-
10個の整数を入力して小さい順...
-
構造体配列の並べ替え
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
excel VBA リストビューの行...
おすすめ情報