![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.2ベストアンサー
- 回答日時:
こんなのはどうでしょう
<!DOCTYPE html><meta charset=utf-8><title>枠を摘んで表を変形</title>
<script>(function(){var _=0;
_ ; function A(a,i) { return Array.prototype.slice.call(a, i?i:0) }
_ ; function S(e) { return document.defaultView.getComputedStyle(e, '') }
_ ; var resizingContext = null;_ ;
_ ; function calcXY(e,x,y) {
_ , _ ; var M = 5, h, v;
_ , _ ; if (e instanceof HTMLTableCellElement) {
_ , _ , _ ; var col = e.cellIndex, row = e.parentElement.rowIndex;
_ , _ , _ ; h = (x < 0+M && 0 < col)? col-1: (e.offsetWidth-M <= x)? col: -1;
_ , _ , _ ; v = (y < 0+M && 0 < row)? row-1: (e.offsetHeight-M <= y)? row: -1;
_ , _ ; }
_ , _ ; if (e instanceof HTMLTableElement) {
_ , _ , _ ; h = (x < e.offsetWidth - M)? -1: e.rows[0].cells.length-1;
_ , _ , _ ; v = (y < e.offsetHeight - M)? -1: e.rows.length-1;
_ , _ ; }
_ , _ ; return (h >=0 || v >= 0)? {horizon:h, vertical:v}: null;
_ ; }
_ ; function resizeFirst(ev){
_ , _ ; if (resizingContext) return;
_ , _ ; var elem = ev.target, tab = ev.currentTarget, ctx = calcXY(elem, ev.offsetX, ev.offsetY);
_ , _ ; if (!ctx) return;
_ , _ ; ev.preventDefault();
_ , _ ; ctx.baseX = ev.pageX, ctx.baseY = ev.pageY;
_ , _ ; if (ctx.horizon >= 0) ctx.cellX = tab.rows[0].cells[ctx.horizon], ctx.width = parseFloat(S(ctx.cellX).width.replace(/px$/,''));
_ , _ ; if (ctx.vertical >= 0) ctx.cellY = tab.rows[ctx.vertical].cells[0], ctx.height = parseFloat(S(ctx.cellY).height.replace(/px$/,''));
_ , _ ; resizingContext = ctx;
_ , _ ; window.addEventListener('mousemove', resizeMid, false);
_ , _ ; window.addEventListener('mouseup', resizeEnde, false);
_ ; }
_ ; function resizeCursor(ev){
_ , _ ; var m = calcXY(ev.target, ev.offsetX, ev.offsetY);
_ , _ ; ev.currentTarget.style.cursor = m? 'move': 'auto';
_ ; }
_ ; function resizeMid(ev){
_ , _ ; if (!resizingContext) return;
_ , _ ; var m = resizingContext;
_ , _ ; if (m.cellX) m.cellX.style.width = Math.max(1, m.width + ev.pageX - m.baseX) + 'px';
_ , _ ; if (m.cellY) m.cellY.style.height = Math.max(1, m.height + ev.pageY - m.baseY) + 'px';
_ ; }
_ ; function resizeEnde(ev) {
_ , _ ; if (!resizingContext) return;
_ , _ ; window.removeEventListener('mousemove', resizeMid, false);
_ , _ ; window.removeEventListener('mouseup', resizeEnde, false);
_ , _ ; resizingContext = null;
_ ; }
_ ; window.addEventListener('DOMContentLoaded',function(){
_ , _ ; A(document.querySelectorAll('table[border]')).forEach(function(s){
_ , _ , _ ; s.addEventListener('mousedown', resizeFirst, false);
_ , _ , _ ; s.addEventListener('mousemove', resizeCursor, false);
_ , _ ; });
_ ; },false);
})()</script>
<style>
th, td { padding:0.5ex; }
</style>
<h1>枠を摘んで表を変形</h1>
<table border><caption>table #1</caption>
<thead><tr><th>name<th>flaggschiff<th>grade
<tbody><tr><td>Grillparzer<td>Eistla<td>Admiral
<tr><td>Knappstein<td>Ulfrun<td>Admiral
</table>
<h2>表が複数あっても大丈夫</h2>
<table border><caption>table #2</caption>
<thead><tr><th>name<th>flagship<th>grade
<tbody><tr><td>Morton<td>Achilles<td>Vice Admiral
<tr><td>Karlsen<td>Diomedes<td>Vice Admiral
</table>
No.1
- 回答日時:
判別を簡単に行いたいのであれば、ひとつのアイデアとして・・・
セルのバックグラウンドカラーをボーダーに見せる方法がありそうです。
各セルの内側にmargin:2pxなどとして、div要素を入れて、実際の内容はその中に記す。
セル内かつdivの外側であればボーダー(に見える部分)をクリックしたことになります。
まぁ、この方法だと、本来のマークアップの目的とは少々異なってしまうので、なんですが・・・
通常のマークアップの場合で判定したければ・・・
クリックした時のマウスの位置を計算して、その位置がセルの外周でボーダー幅の中であればボーダーと判断する、といった方法が考えられるのではないでしょうか。
上記に比べると、スクリプトが少々面倒にはなりますが。
考えれば他にもありそうですが、とりあえず思いついた方法を。
この回答へのお礼
お礼日時:2015/03/12 21:14
私も似たようなスクリプトが浮かんでいました、
ただ、マークアップの作法が、たしかに気になります。
でもでも、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アドバイスを下さい。 1 2022/10/08 01:18
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- Visual Basic(VBA) どのロジックでセルが変更されたか知りたい 1 2022/04/22 06:58
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハイパーリンクを別ウインドウ...
-
プルダウンで選択すると、DBの...
-
テーブルの変数について
-
動的なtableの値を取得したい
-
onMouseOverで複数(?)のセル...
-
【UWSC】HTML内のある部分を抽...
-
Selenium.ChromeDriverの使い方...
-
テーブル内に表示されている数...
-
JavaScriptによる表のソート機...
-
テーブル列の表示・非表示機能...
-
データベース呼び出しに使用す...
-
標準準拠モードと後方互換モー...
-
【秀丸マクロ】検索行と、その...
-
プルダウンで選択した値によっ...
-
特定の文字列を挿入
-
至急!GetElementById でtdの...
-
setTimeoutで引数を配列にできるか
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
TextBoxに半角数字以外を入れた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
プルダウンで選択すると、DBの...
-
一覧から選択した行の行番号を...
-
tableの任意行にfocusをあてる
-
ハイパーリンクを別ウインドウ...
-
JavaScriptで特定のtdタグにcla...
-
JavaScriptでテーブルをクリッ...
-
【UWSC】HTML内のある部分を抽...
-
至急!GetElementById でtdの...
-
チェックボックスにチェックが...
-
JavaScriptでテーブルの行入れ替え
-
動的なtableの値を取得したい
-
Selenium.ChromeDriverの使い方...
-
二次元配列に数字をランダムに...
-
Excelで作ったhtmlファイルのサ...
-
スクロールバーの表示位置を変...
-
テーブルの変数について
-
マウスをブラウザの外に出した...
-
テーブル行のクリックでチェッ...
-
jquery datatablesを使用 イン...
おすすめ情報