質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2994閲覧

右クリックメニューからのテーブル操作

yuujiMotoki

総合スコア90

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/11/12 01:30

編集2019/11/12 10:47

#要求仕様
HTMLのテーブルがあり、下記の動作を実装したく思います。

1)テーブル上でマウスを動かすと、所定の行の色が変わる。
2)右クリックを押すと、サブメニューがでて、行に対する処理ができる。
3)処理の内容は、挿入、削除、コピー、ペースト

イメージ説明

#解決方法

Jクエリのイベントで統一して、選択行のINDEXをグローバル変数ROWNUMに入れて
無事に渡すことができました。(VARを付けずにグローバル化)

#課題

挿入と削除を、力づくで作りました。
ところが、挿入と削除の瞬間が分かりにくい状態です。

そこでアニメーションを付けたいと思っているのですが、
そもそもJQUERYが苦手なので、困っています。
(泥臭いコード自体も、もっとすっきりしたいところですが、
現時点では、このコードがもっとも自分には理解しやすいです)

#質問事項

JQUERYでアニメーションを付けたい
JQUERYでコードをすっきりさせたい

すみませんが、私の力では、これが限界です。

html

1<table id="target" align="center" > 2省略 3 4 <div id="contextmenu"> 5 <ul> 6 <li onClick="menu1()">行の挿入</li> 7 <li onClick="menu2()">行の削除</li> 8 <li onClick="menu3()">行のコピー</li> 9 <li onClick="menu4()">行のペースト</li> 10 </ul> 11 </div>

javascript

1 2 $(document).on('mousemove', '#target tr', function () { 3 if (document.getElementById('contextmenu').style.display != "block") { 4 $(this).css("background-color", "#CCFFCC").css("cursor", "pointer"); 5 } 6 }); 7 $(document).on('mouseout', '#target tr', function () { 8 if (document.getElementById('contextmenu').style.display != "block") { 9 $(this).css("background-color", "#ffffff").css("cursor", "normal"); 10 } 11 }); 12 $(document).on("contextmenu", '#target tr', function (e) { 13 document.getElementById('contextmenu').style.left = e.pageX + "px"; 14 document.getElementById('contextmenu').style.top = e.pageY - window.pageYOffset + "px"; 15 document.getElementById('contextmenu').style.display = "block"; 16 rownum = this.rowIndex; 17 }); 18 }); 19

javascript

1 2 function menu1() { 3 var table = document.getElementById('target'); 4 var row_orig = table.rows[rownum]; 5 var row = table.insertRow(rownum + 1); 6 for (var i = 0; i < table.rows[rownum].cells.length; i++) { 7 var cell1 = row.insertCell(-1); 8 cell1.innerHTML = row_orig.cells[i].innerHTML 9 } 10 document.getElementById('contextmenu').style.display = "none"; 11 } 12 13 function menu2() { 14 var table = document.getElementById('target'); 15 var row = table.deleteRow(rownum); 16 document.getElementById('contextmenu').style.display = "none"; 17 } 18 19 function menu3() { 20 alert("menu3がクリックされました。"); 21 } 22 function menu3() { 23 alert("menu3がクリックされました。"); 24 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ゴリ押しするよりも、 jQuery.contextMenu というプラグインの検討をオススメします。

イベントハンドラに伝搬される event オブジェクトに着目し、イベント発生した要素の参照方法や、バブリングのしくみを理解したほうが近道かと思います。

いろんなソースを切り貼りして実装

jQuery をお使いのようですので、jQueryの作法に則るほうが、ひとまずの形を仕上げやすいと思います。

投稿2019/11/12 02:06

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問