• ベストアンサー

tableの任意行にfocusをあてる

行いたいこと tableタグにあるTHREDタグとTBODYタグがあり、現在はTBODYタグの任意行を選択するとその行の色が変わるようになっています。 サーバアクションで画面遷移を行ったりした後、その画面に戻ってくる時に以前選択されていた行が存在したらそこで色が変わるようにしています。 そこで問題なのですが、その画面に戻ってきた時にしたのほうが選択行だった場合フォーカスが当たり、すくロースして表示してないと一瞬どこいった?という風に感じてしまいます。なので、そこの行まで飛ばしてやりたいのですが、できるでしょうか? 選択行の色変えには以下の関数を作って行っています。 function syncroData() { for(var i = 1 ; i < table10.rows.length ; i++){ if(i == hojirowid) { table10.rows[i].style.backgroundColor = "yellow"; } else { if(i%2 == 0){ table10.rows[i].style.background = "#fff8dc"; }else{ table10.rows[i].style.background = "#f5fffa"; } } } 試しにfor文が終わった後に table10.rows[i].focus(); と記述してみましたが、そういうメソッドが使えないのかそこまで飛んでくれませんでした(もしかしたら、フォーカスだけあたってスクロールしなかっただけ?) 以上、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

スクロールさせたい位置を調べて、scrollTo すればよいのでは? var node = table10.rows[i]; var y = 0; while (node.tagName.toUpperCase() != "BODY") {   y += node.offsetTop;   node = node.parentNode; } window.scrollTo(0, y); ※インデントは全角空白なので、コピーする場合はタブなどに変えてください。

utatane
質問者

お礼

レスが遅れました・・・・・納期ぎりぎりでやってたもんで・・・・ scrollToメソッドについては知りませんでした・・ 今回はできないということで、相手側に伝えてしまったので、次回以降に役立てたいと思います。 ありがとうございました。

その他の回答 (2)

  • dayowl
  • ベストアンサー率56% (84/148)
回答No.2

私の解釈が間違っているかも・・・ 表の任意行までスクロールさせたいのなら表の各行に こんな↓感じで<a name=..">を入れておいて <table> <tr><td><a name="001">A</a></td><td>B</td><td>c</td></tr> <tr><td><a name="002">A</a></td><td>B</td><td>c</td></tr> </table> 戻るときに document.location.href="hoge.html#002" とか <a href="hoge.html#002">もどる</a> とやれば、その行のあたりが表示されますので、 「#002」の部分を動的に変更してやれば良さそうですが。。。。

utatane
質問者

お礼

レスが遅れました・・・・・納期ぎりぎりでやってたもんで・・・・ 今回のテーブルの中身はxmlでのBindDataで処理を行っているため、単純にaタグを入れ込めそうにありませんでした。 今後の参考にしたいと思います。ありがとうございました。

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

僕の知っている範囲では、できないと思いますが。。。 ちょっと誤解がある様なので、 > 試しにfor文が終わった後に > table10.rows[i].focus(); > と記述してみましたが、そういうメソッドが使えないのかそこまで飛んでくれませんでした(もしかしたら、フォーカスだけあたってスクロールしなかっただけ?) どうやら、フォーカスの意味を取り違えているようです。 フォーカスと言うのは、そのフォームの中の指定された名前を、処理の対象としますよ。と言う意味であって、そこへ移動しますよ。と言う意味ではありません。 なので、 > (もしかしたら、フォーカスだけあたってスクロールしなかっただけ?) その通りです。 Webの場合、見ている人のブラウザ環境が同じであるとは限らないので、そう言う処理はサポートされていない。と言うパターンが多いのですよね。

utatane
質問者

お礼

レスが遅れました・・・・・納期ぎりぎりでやってたもんで・・・・ textareaなどは、focusを当てるとそこに飛ぶのでスクロールするのですが、この場合はあくまでテーブルにフォーカスが当たっているようで、スクロールはしないようですね^^; 回答ありがとうございました

関連するQ&A

  • テーブル内のテキストを取得したい

    htmlで書かれたテーブルをドラッグして選択状態にした後、Ctrl+Cをして、 メモ帳に貼り付けると、テーブルの見た目のままテキストだけが取得できますよね? これと同じように、あるボタンをクリックしたときに、テーブル内のテキストを見た目とおなじように (行や改行など)取得したいのですが、 javascriptでやる方法はないでしょうか? なお、以下のようにすると、テキストのみではなく、 テーブル内に含まれるhtmlのタグ名などのテキストも全て取得してしまいます。  テーブル名 tablename  var ans = ""; var Tbl=document.getElementById(tablename); for(var i=0;i< Tbl.rows.length;i++){ ans=Tbl.rows[i].innerHTML+"\n"; }

  • 空白行を削除して上へ詰めたい

    例えば、画像のように 1行目から10行目の間に適当に値が入ってるとします。 その中で、行に何も入っていないのなら、削除して上へ詰めたいのですが どのようなコードを書けばいいでしょうか? 該当の行の1列目から256列目のどの列にも値が入ってないのが条件です。 自分なりに考えたのですが ---------------------------------------- Sub test1() Dim i, gyou As Long For gyou = 1 To 10 '最終行 i = WorksheetFunction.CountA(Rows(gyou)) If i = 0 Then Rows(gyou).Delete gyou = gyou - 1 '削除すると行がずれる End If Next End Sub ---------------------------------------- Sub test2() Dim i, gyou As Long gyou = 1 Do While gyou <> 10 i = WorksheetFunction.CountA(Rows(gyou)) If i = 0 Then Rows(gyou).Delete Else gyou = gyou + 1 End If Loop End Sub ---------------------------------------- どちらも、なぜか無限ループになってしまいます。 どうすればいいか教えてください。

  • エクセル 最終行からの連続コピー

    エクセルで最終行から上に連続する10行(最終行含む)をコピーしたいです。 途中、空白行が含まれている場合でも、最終行を特定し、コピーできるようにするには、下記のコードにどう手を加えたらよいでしょうか? どなたかアドバイスをお願いします。 Sub Test()   Dim i As Long   Dim j As Integer   Dim rng As Range   With ActiveSheet     'フィルタ     .Range("A1").CurrentRegion.AutoFilter Field:=1          '行選択     With .AutoFilter.Range       For i = .Cells(.Cells.Count).Row To 2 Step -1         If .Rows(i).Hidden = False Then           If rng Is Nothing Then             Set rng = .Rows(i)           Else             Set rng = Union(rng, .Rows(i))           End If           j = j + 1         End If         If j >= 10 Then Exit For       Next i       'コピー       If Not rng Is Nothing Then         rng.Copy Worksheets("Sheet2").Range("A1")         Beep       Else         MsgBox "該当行は存在しません。", 48       End If     End With   End With   Set rng = Nothing なお、コードはこちらを参考にさせていただきました。 http://okwave.jp/qa3552420.html?ans_count_asc=1

  • tableタグについて

    tableタグの挙動について教えてください。 下記のタグで、tableの幅は240pxにしたいのですが、 ブラウザ表示(Chrome)では230pxとなりました。 この10pxの隙間はどこで発生しているのでしょうか? どうぞよろしくお願いします。 ーーーーHTMLーーーーー <body style="width:240px;margin:0 auto;"> <div class="list-box"> <table width="240" border="0" cellspacing="0" cellpadding="0"> <tbody><tr> <td>テキスト/td> <td>テキスト/td> </tr> </tbody></table> </div> </body> ーーーーCSSーーーーー .list-box{margin:0 auto;} .list-box table{ width:100%;} .list-box table td:first-child{ background:#900;} .list-box table td:last-child{ background:#069;}

    • ベストアンサー
    • CSS
  • DataTableで重複行を削除したい

    こんにちは。 DataTableで重複した行を削除するプログラムが作れず悩んでいます。 もしよろしければ、教えてもらえないでしょうか? 例えば下記のようなDataTableのとき。 ID CD ------------- 5  A1 6  A2 8  A3 9  A4 10  A5 5  A6 10  A7 NULL A8 NULL A9 NULL A10 ------------- 下記のようにしたいと思っています。 ID CD ------------- 5  A1 6  A2 8  A3 9  A4 10  A5 NULL A8 ------------- 重複しているレコードは最初にヒットしたものを残します。 そこで下記のようなプログラムを書いてみたのですが、駄目でした。 ' 重複行を削除する For i = 0 To DataTable.Rows.Count - 1 Index = temp.IndexOf(DataTable.Rows(i).Item("id")) If Index = -1 Then temp.Add(DataTable.Rows(i).Item("id")) Else dr = DataTable.Rows(i) DataTable.Rows.Remove(dr) If i = DataTable.Rows.Count - 1 Then Exit For End If i = i - 1 End If Next どなたか分かる方、よろしくお願いいたします。

  • データベース上の任意の行を削除しても連番にしたい

    ●質問の主旨 ワークシート上にあるデータベースの任意行を 直接マウス操作などで削除しようとするとき、 当該行のA列に入力されている番号について 削除されても、連続した番号を表示させ続けるようには、 どうしたら良いでしょうか? 下記コードを作成しましたが、上手くいきません。 どのように書き換えたら良いでしょうか? VBAをはじめてまだ2カ月程度の初心者です。 使用機種はWindowsVista、Excel2007です。 ご存知の方、どうぞご教示よろしくお願いします。 ●質問の補足 添付の画像のようにデータベース上の各行に1から順番に番号を 振っています。ところが下記のコードでは 「End Ifに対するIfブロックがありません」とエラーが返されます。 「If…Then…Else」ステートメントの「Else」のことを指しているので しょうか?ある参考書では「Else」は省略可と書いてあったので、 記述しなかったのですが… ●コード 'データベース上の任意行の削除について Sub Gyo_Sakujyo() Dim i As Integer Dim j As Range Dim DB_Kiten As Range 'Worksheets(1)にある任意行の直下の行のA列セルを変数jに短縮置換 Set j = Worksheets(1).Cells(i - 1, 1) 'データベースの基点をWorksheets(1)のA5セルに設定 Set DB_Kiten = Worksheets(1).Range("A5") '任意の行からワークシート上に書き込みがある領域から '1行分(見出し分)を差し引いた範囲において For i = i To DB_Kiten.CurrentRegion.Rows.Count - 1 'もし任意行が策された時、変数jに記入されている値は今の値から1を差し引く If Rows(i).Delete Then j.Value = j.Value - 1 End If Next End Sub

  • HTMLメールでテーブル内の画像を送信する方法をお教え下さい

    Outlook Expressを使用してひな形メールを送信すると。テーブル内の画像が送信先では見えていないと云われました。自分の送信済みメールを見ると画像はチャンと入っているのですが、どのようにしたらテーブル内画像が相手にも見る事が出来るようになるのでしょうか、タグは下記のような物です。 <TABLE width='400PX' height='400PX'> <TBODY> <TD background='画像.gif' style ='background-position: 0% 50% ; background-repeat:no-repeat;background-attachment:fixed'> </TD></TBODY></TABLE> IEで見ると問題なく見え、OEのプレビューでも問題ありません。

  • テキストエリアをenterキーでフォーカス移動したい

    複数あるテキストエリア間を、enterキーでフォーカス移動をしたいです。 以下のようにしましたが、2つめのテキストエリアへフォーカス移動すると、改行が入力され、カーソルが2行目へ移動してしまいます。 enterキーを押しているのでこうなってしまうと思うのですが、 カーソルが1行目へ移動するようにするには、どうしたらいいでしょうか? フォーカス移動後に改行コードがあったら、""にreplaceする・・等、試してみたのですが、なかなか上手くいきません。 どなたかお分かりになる方がいらっしゃったら、教えてください。 <HTML> <HEAD> <SCRIPT language="JavaScript"> <!-- function FirstFocus() { document.forms.F1.elements[0].focus(); } function nextFocus(n) { if (event.keyCode == 13) { for (var i = 0, f = n.form.elements; i < f.length; i++) { if (f[i] == n) { (f[i + 1] || f[0]).focus(); } } } } //--> </SCRIPT> </HEAD> <BODY onload="FirstFocus()"> <FORM name="F1"> <TEXTAREA name="T1" rows="5" cols="30" onkeydown="nextFocus(this);"></TEXTAREA><BR> <TEXTAREA name="T2" rows="5" cols="30" onkeydown="nextFocus(this);"></TEXTAREA><BR> <TEXTAREA name="T3" rows="5" cols="30"></TEXTAREA><BR> </FORM> </BODY> </HTML>

  • tableのtrの要素数を番号順に取得したい

    現在、tableでのデザインを考えています。 やりたい事はテーブルにマウスカーソルを合わせた際にカーソルを合わせた行の色を変えるというものです。またjavascriptは外部ファイル化したいと考えていますが、javascriptの知識がなく困っておりまして 申し訳御座いませんが皆様どうぞよろしくお願い致します。 http://www.tagindex.com/kakolog/q2bbs/1/114.html こちらのページの2005/07/27 16:50に投稿された方のソースを参考に html内ではこのような感じで <body onload="CellColorAlternate();"> テーブルでは <table onmouseover="CellColorAll()" onmouseout="CellColorAlternate()"> 外部ファイルでは function CellColorAlternate(){ var cell = document.getElementsByTagName("tr"); for (i = 0; i < cell.length; i++) { if(!(i%2)){ cell[i].style.backgroundColor = "#CCFFCC"; } else { cell[i].style.backgroundColor = "#FFCCCC"; } } } function CellColorAll(obj){ var cell = document.getElementsByTagName("tr"); for (i = 0; i < cell.length; i++) { if(!(i%2)){ cell[i].style.backgroundColor = "#FFCCCC"; } else { cell[i].style.backgroundColor = "#CCFFCC"; } } } このようにするとカーソルを合わせた時にすべての行が入れ子にはなるのですが、上記の外部ファイルに付け加えるような形でこれをマウスを合わせた部分だけ変更するにはどのようにしたらよろしいのでしょうか?

  • テーブルに関する質問です。

    テーブルに関する質問です。 wordpressでHPを作っているのですが、テーブルが思った通りの形にならない為 試しにhtmlドキュメントで同じテーブルを作ろうと試みたのですが やはり同じ現象が起き、思った通りのレイアウトにならないです。 一行目のテーブルと二行目のテーブルはくっつけて、 二行目の列のテーブルのセルとセルの間隔を1px空けてやりたいのですが (1)のwidth:0;の空きセルを作って、それをセルとセルの間に挿入することによって 間隔を空けるという方法は、どうやっても1pxではなく2pxの間隔になってしまい、 (2)の白いborderをセルの右側だけに表示させるという方法では、 Firefoxでは思った通りのレイアウトなのですが、 IE6で見た場合に一行目のセルに線が付きぬけて表示されてしまいます。 色によっては誤魔化かされて付き出てない様に見えるのですが。 どうしたら良いでしょうか? よろしくお願いします。 (1) <HTML> <HEAD> <TITLE>テスト</TITLE> <STYLE type="text/css"> <!-- table { border-collapse: collapse; border-spacing: 0; } a img { border: none; } --> </STYLE> </HEAD> <BODY> <table border="0"> <tbody> <td style="background-color:#b7a193; width: 300px; height: 30px; padding:0px" colspan="5"></td> <tr> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse;"></td> <td style="background-color: #ffffff; width: 0px; height: 40px; border-collapse: collapse;"></td> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse;"></td> <td style="background-color: #ffffff; height: 40px; width: 0px; border-collapse: collapse;"></td> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse;"></td> </tbody> </table> </BODY> </HTML> (2) <HTML> <HEAD> <TITLE>テスト</TITLE> <STYLE type="text/css"> <!-- table { border-collapse: collapse; border-spacing: 0; } a img { border: none; } --> </STYLE> </HEAD> <BODY> <table border="0"> <tbody> <td style="background-color: b7a193; width: 300px; height: 30px; padding:0px" colspan="3"></td> <tr> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse; border-right: #ffffff 1px solid;"></td> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse; border-right: #ffffff 1px solid;"></td> <td style="width: 100px; height: 50px; background-color: #eee8d9; border-collapse: collapse; border-right: #ffffff 1px solid;"></td> </tbody> </table> </BODY> </HTML>

    • ベストアンサー
    • CSS