[解決済み] Javascriptのクラスを使ってテーブルの行を表示/非表示にする
質問
なんとなく展開したり折りたたんだりするテーブルがあるのですが、使い勝手が悪くなってきて、IEやFirefoxではうまく動作しないのですが、どうしたらいいですか?
というわけで、JavaScriptのコードです。
function toggle_it(itemID){
// Toggle visibility between none and ''
if ((document.getElementById(itemID).style.display == 'none')) {
document.getElementById(itemID).style.display = ''
event.preventDefault()
} else {
document.getElementById(itemID).style.display = 'none';
event.preventDefault()
}
}
そして、サンプルHTMLです。
<table>
<tr>
<td>Product</td>
<td>Price</td>
<td>Destination</td>
<td>Updated on</td>
</tr>
<tr>
<td>Oranges</td>
<td>100</td>
<td><a href="#" id="toggle" onClick="toggle_it('tr1');toggle_it('tr2')">+ On Store</a></td>
<td>22/10</td>
</tr>
<tr id="tr1" style="display:none">
<td></td>
<td>120</td>
<td>City 1</td>
<td>22/10</td>
</tr>
<tr id="tr2" style="display:none">
<td></td>
<td>140</td>
<td>City 2</td>
<td>22/10</td>
</tr>
<tr>
<td>Apples</td>
<td>100</td>
<td><a href="#" id="toggle" onClick="toggle_it('tr3');toggle_it('tr4')">+ On Store</a></td>
<td>22/10</td>
</tr>
<tr id="tr3" style="display:none">
<td></td>
<td>120</td>
<td>City 1</td>
<td>22/10</td>
</tr>
<tr id="tr4" style="display:none">
<td></td>
<td>140</td>
<td>City 2</td>
<td>22/10</td>
</tr>
</table>
問題は、1つ1つのIDを使っているので、親ごとに隠し行をたくさん作りたいのに、IDが多すぎて処理しきれないので、とても困っていることです。しかもIEとFireFoxは最初のHidden Rowしか表示されず、他のHidden Rowは表示されません。全てのIDを一緒にトリガーして動作させたからこうなるのでは? IDの代わりにClassを使ってHidden RowをIndetifyすれば良いのではと思うのですが。
私はこのすべてが本当に初めてなので、どんな種類の簡単な方法でもいいので説明してみてください。また、私はjQueryを試してみましたが、それを取得することができませんでした。
どのように解決するのですか?
このサンプルで何をしようとしているのかがわかりにくいのですが、実はクラスを使おうと考えていることは正しいのです。私はJSFiddleを作成し、これを行うための少し良い方法(と私は願っています)を示すのに役立ちます。
以下がそのフィドルです。 リンク .
IDを扱う代わりに、クラスを扱うということです。あなたのコードサンプルでは、OrangesとApplesがあります。私は、それらを商品カテゴリとして扱い(あなたの目的がよくわからないので)、独自のIDを持っています。そこで、私は製品に
<tr>
を使用しています。
class="cat1"
または
class="cat2"
.
また、リンクのマークはシンプルな
.toggler
クラスがあります。を持つのは良い習慣ではありません。
onclick
属性は、要素そのものに適用されます。ページロード時にJavaScriptでイベントを'バインド'する必要があります。私はjQueryを使ってこれを実現している。
$(".toggler").click(function(e){
// you handle the event here
});
この形式では、イベントハンドラを
click
を持つリンクのイベント
toggler
. 私のコードでは
data-prod-cat
属性に
toggler
というリンクで、どの商品列を制御するかを指定します。(私が
data-*
属性について説明します。
ここで
. 詳しくは「html5 データ属性」でググってみてください)
イベントハンドラでは、こんなことをしています。
$('.cat'+$(this).attr('data-prod-cat')).toggle();
このコードで、実際には、以下のようなセレクタを作ろうとしている。
$('.cat1')
特定の商品カテゴリの行を選択し、その可視性を変更することができます。私は
$(this).attr('data-prod-cat')
にアクセスするためのものです。
data-prod-cat
属性で指定します。私はjQueryの
トグル
のようなロジックを書く必要がない。
if visible, then hide element, else make it visible
JSのコードでやっているようなことは、jQueryが処理してくれます。トグル関数はそのとおりに動作し
toggle
は、指定された要素の可視性を指定します。
十分な説明になったでしょうか。
関連
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] JavaScriptでページの一番上までスクロールする?
-
[解決済み] JavaScriptでテキスト入力フィールドの値を取得するにはどうすればよいですか?
-
[解決済み] HTML5/Canvas/JavaScriptを使用してブラウザ内のスクリーンショットを撮影する
-
[解決済み] Reactで要素を表示・非表示にする
-
[解決済み] JavaScriptのhide/show要素
-
[解決済み] jQuery/JavaScriptを使用してすべてのCSSクラスを削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】DOMException: サポートされているソースが見つからなかったため、読み込みに失敗しました。
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] HTMLテーブルの行<tr>をスペースを取らないように隠すにはどうしたらよいですか?