回答編集履歴

1

調整

2025/02/12 03:42

投稿

yambejp
yambejp

スコア117203

test CHANGED
@@ -6,3 +6,98 @@
6
6
  $(document,"#myTable tbody tr").contextMenu({
7
7
  ```
8
8
  とするだけで行けると思います
9
+
10
+ # 参考:vanilla js版
11
+
12
+ ```html
13
+ <script>
14
+ document.addEventListener("contextmenu", e => {
15
+ const target=e.target;
16
+ const cMenu=document.querySelector('#contextMenu');
17
+ if(cMenu) cMenu.remove();
18
+ if(target.closest('#myTable td')){
19
+ e.preventDefault();
20
+ const r = target.closest('#myTable td').getBoundingClientRect();
21
+ const left=e.pageX;
22
+ const top=e.pageY;
23
+ const cMenu=tmp.content.querySelector('#contextMenu').cloneNode(true);;
24
+ target.closest('#myTable td').appendChild(cMenu);
25
+ Object.assign(cMenu.style,{position:"absolute",top,left});
26
+ }
27
+ });
28
+ document.addEventListener("click",e=> {
29
+ const target=e.target;
30
+ const cMenu=document.querySelector('#contextMenu');
31
+ if(cMenu){
32
+ if(target.matches('#contextMenu a')){
33
+ e.preventDefault();
34
+ if(target.matches('[data-value=add')){
35
+ const tr=tmp.content.querySelector('tr').cloneNode(true);
36
+ target.closest('tr').after(tr);
37
+ }
38
+ if(target.matches('[data-value=del')){
39
+ target.closest('tr').remove();
40
+ }
41
+ }
42
+ cMenu.remove();
43
+ }
44
+ });
45
+ </script>
46
+
47
+ <style>
48
+ table {
49
+ border-collapse: collapse;
50
+ }
51
+ th,td {
52
+ border: solid 1px;
53
+ width: 300px;
54
+ height: 80px;
55
+ }
56
+ ul {
57
+ width: 120px;
58
+ height: 60px;
59
+ background-color: rgb(97, 97, 224);
60
+ }
61
+ </style>
62
+ <div style="height:60%">dummy</div>
63
+ <table id="myTable" class="table table-hover">
64
+ <thead>
65
+ <tr>
66
+ <th>#</th>
67
+ <th>First Name</th>
68
+ <th>Last Name</th>
69
+ </tr>
70
+ </thead>
71
+ <tbody>
72
+ <tr>
73
+ <td>1</td>
74
+ <td>Mark</td>
75
+ <td>Otto</td>
76
+ </tr>
77
+ <tr>
78
+ <td>2</td>
79
+ <td>Jacob</td>
80
+ <td>Thornton</td>
81
+ </tr>
82
+ <tr>
83
+ <td>3</td>
84
+ <td>Larry</td>
85
+ <td>the Bird</td>
86
+ </tr>
87
+ </tbody>
88
+ </table>
89
+ <div style="height:60%">dummy</div>
90
+ <template id="tmp">
91
+ <ul id="contextMenu" class="dropdown-menu" role="menu">
92
+ <li><a tabindex="-1" href="#" data-value="add">Add Row</a></li>
93
+ <li><a tabindex="-1" href="#" data-value="del">Delete Row</a></li>
94
+ </ul>
95
+ <table>
96
+ <tr>
97
+ <td>#</td>
98
+ <td>#</td>
99
+ <td>#</td>
100
+ </tr>
101
+ </table>
102
+ </template>
103
+ ```