• 締切済み

セルの背景色の取得ができない

こんばんは。いつも利用させていただいてます。また皆さんのお知恵をお貸りに来ました。 親ウィンドウのテーブルのセルの背景色が白である場合、処理をさせるため以下のコードを書きました。 if(window.opener.document.getElementById(idNameS).style.backgroundColor == "white"){ myFlg=1; } これを実行するとFirebugで、 window.opener.document.getElementById(idNameS) is null というエラーが出てしまいます。ちなみに実行時のセルの背景色は全て白です。 いったい何がnullなのでしょうか。それからどのようにしたらエラーが出ずにうまく動くのでしょうか。 ご教授よろしく願いします。

みんなの回答

回答No.4

No3追記です。 説明解りにくいかもしれないので、もう少し詳しくします。 HTMLにでもjavascriptでも、処理をしているのはブラウザです。 使用ブラウザがHTMLで"white"とあるのを、一旦null(空)に変換して、 値がなかった時と同じ処理(関数)へ 飛ばしているのではないかと思ったのです。 処理はブラウザの種類に一任されますから、 whiteをwhiteとしてあつかうブラウザも存在するでしょう。 しかし、値がnullの場合は必ず白になるはずですから、 whiteとnullの処理を同じにしておく必要があると思います。

kai1192
質問者

お礼

ご回答ありがとうございます。 No.2の方の捕捉に書かせて頂きましたが、実は緑の時も同じエラーが出てしまうのです↓↓情報不足ですみませんでした。 しかし、ご指摘いただいた可能性も十分考えられますね。コードを修正します。参考になるご意見ありがとうございました。

回答No.3

値がnull(空)場合に、ブラウザの描画で、 白く表示しているだけではないのでしょうか。 ブラウザには自動翻訳機能があって、 HTMLの記述が正確でなくても、エラーの起こらない表示をします。 バックグラウンドの色指定がないとき表示されるのは白い背景です。 javascriptには、そういった判別機能はないと思います。 nullの場合も myFlg=1; になる処理を記述すれば いいのではないでしょうか。 要するに if(window.opener.document.getElementById(idNameS).style.backgroundColor == null){myFlg=1;} の一行を加えればいいと思います。(もちろん&&で拡張もOK)

kai1192
質問者

お礼

ご回答ありがとうございます。 お礼はNo.4のご回答にまとめさせていただきました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

nullなのでオブジェクトは存在していて、値がnullなのではと想像されます。 null値でも比較して、結果が偽となりそうな気もしますが・・・ idNameSの対象が何か不明ですが、idNameSのbackgroundColorが親ウィンドウのHTMLで明示的に指示されていないので、未定義(値がない)ということではないでしょうか? 表示にはbodyのバックグラウンドが踏襲されていたりとか・・・ =="white"の比較も、HTMLで#FFFFFFと指定をしていたりすると、違う値として判断される可能性がありますので、確認しておいたほうが良いかも。(すみませんが、想像です。確認はしていません。)

kai1192
質問者

お礼

ご回答ありがとうございます。 ご指摘いただいた色のコードについてですが、今一度調べてみたところHTMLでもwhiteと記述してありましたのでその可能性もなさそうです。 補足に情報を書きますのでそちらもご覧いただけると幸いです。

kai1192
質問者

補足

実は白と緑でセルに色をつけて白の部分のid名だけを取得するということをやっていて、id名の取得は出来ているのです。 つまりやりたいことは出来ているのですが、このエラーのせいで処理がとまってしまうという状態です。 id名や色の指定は出来ているようです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

idNameSでしめしているidが間違っているのでは? (たとえば'idNameS'だったり・・・)

kai1192
質問者

お礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。 ご指摘いただいたid名の部分は間違いないようです。

関連するQ&A

  • セルに文字が入っていないかどうかの判定

    すごく簡単なことなのかもしれませんが、自分でしらべてもわからないので教えてください。 idNameというid名のセルに文字が入っていないことを確かめて処理をしようとしています。 if(document.getElementById(idName).innerHTML== null){   myFlg=0; }else{   myFlg=1; } セルには何も入力されていないのですが、常にelseの処理をしてしまいます。 初心者のため何が悪いのか見当がつきません。皆さんのお知恵をお貸しください。よろしくお願いします。

  • getElementByIdで謎のエラーが・・・

    こんにちは。以前も同じ質問をさせていただいた者です。 http://oshiete1.goo.ne.jp/qa4199640.html getElementByIdでセルの背景色を変更するために document.getElementById(planId).style.backgroundColor="white"; というコードを書いたのですが、 document.getElementById(planId) is null というエラーが出てしまいます。しかしセルの塗りつぶしはできているという謎のエラーです。 ここからが以前より多少進展したところなのですが、どうやら原因はID名にあるようです。 実は、planIdは一つ以上の変数の内容と組み合わせて生成しています。 a=ABC; b=123; planId=a+String(b); の様にです。 ID名は動的なものでないと困るので、変数を使っていたのですがこういうやり方はできないのでしょうか? もしほかにいい方法があればご教授ください。よろしくお願いします。

  • 一つの関数で画像や色を変更するには?

    こんにちは、いつもお世話になっています。 以前親ウィンドウのHTMLの内容をテキストエリアに表示する と言う内容に付いて質問をさせて頂きました。 今作成しているのは子ウィンドウから親ウィンドウの 任意の場所の画像や背景色、テキストの内容をテキストで変更するというものです。 その後作業をすすめてまいりましたがふと思いました。 すべて window.opener.document.getElementById が共通で その後にstyle.backgroundColorやimage.src、innerHTMLが続くだけです。 そこで今は色変更、画像変更、テキスト変更と関数に分けていますが ひとつの関数でそれをできないかと思ったのです。 たとえばなにか引数としてimage.srcを渡すと window.opener.document.getElementById(1).A=○○; のAにimage.srcが自動的にはいって画像変更ができるようになる と言う風なことはできないのでしょうか? もし可能だとしたら代入する値が画像であるか、色名であるかと言った判定も やはりしていくべきでしょうか? どなたか宜しくお願い致します。

  • 順番にセルの背景色をつけたい

    javascriptを使って セルの背景色一定の時間で順番に変える方法を調べています。 ボタンをクリックすると □□□□ ↓ ■□□□ ↓ □■□□ ↓ □□■□ ↓ □□□■ と変化するようなものを作成したいと考えております。 下記のソースでalertを出すと実現できるのですが、 alertをコメントアウトするとうまくいきません。 以上の点、アドバイス等お願いします。 <html> <head> <title></title> <script type="text/javascript"> function changeColor(){ var targetTable = document.getElementById('colorchange'); var targetTr = targetTable.rows[0]; var tdLen = targetTr.cells.length; for(var i = 0 ; i < tdLen ; i++ ){ if( i==0 ){ targetTr.cells[0].style.backgroundColor='red'; }else{ targetTr.cells[i-1].style.backgroundColor='white'; targetTr.cells[i].style.backgroundColor='red'; } wait( 300 ); //このalertを消すとうまくいかない alert('test'); } } function wait( timeWait ) { var timeStart = new Date().getTime(); var timeNow = new Date().getTime(); while( timeNow < (timeStart + timeWait ) ) { timeNow = new Date().getTime(); } } </script> </head> <body> <table border="1" id="colorchange"> <tr> <td>1111</td> <td>2222</td> <td>3333</td> <td>4444</td> </tr> </table> <button onClick="changeColor()">スタート</button> </body> </html>

  • 子ウィンドウから親ウィンドウのチェックボックス

    おそれいります。 現在、子ウインドウで、window.opener.document.getElementById('text1').value='4444'; window.opener.document.getElementById('text2').value='こんにちは'; window.opener.document.getElementById('text3').value='今日は晴れ'; として、親ウィンドウで <input type="text" id="text1"> <input type="text" id="text2"> <input type="text" id="text3"> へ値をセット出来ているのですが、 この記述の流れで親ウィンドウのチェックボックスを子ウィンドウからtrueにすることはできるでしょうか。よろしくお願いします。

  • .getElementById()のエラーについて

    IEで document.getElementById()はNullまたはオブジェクトではありません。 というエラーが出てしまいます。 document.getElementById()はNull、 document.getElementById()をオブジェクトにする とはどういうことでしょうか?

  • スタイルシートの背景色の取得

    あるセルから他のセルへスタイルシートの背景色をコピーしたいのですが、下記のように実行すると無色となってしまいます。 どなたかご教授いただけませんでしょうか。 因みにコピーにしなければならないのは、元のセルの色も動的に変わるという理由です。 <head> <style> td.a{ background:blue; width:25; height:15; } td.b{ background:green; width:25; height:15; } </style> <script type="text/javascript"> function s(b){ document.getElementById('ia').style.background=b.style.background; //document.getElementById('ia').style.background="red"; } </script> </head> <body> <table Cellspacing="1"> <td id="ia" class="a"></td> </table> <table Cellspacing="1"> <tr> <td id="ib" class="b" onmousedown="s(this)"></td> </tr> </table> </body>

  • テーブルの背景色を複数変更する

    テーブルにて、onMouseOverで背景色を変え、 onMouseOut にて背景色を戻すスクリプトを作っています。 セル一つならば変更できますが、複数のセルに依存関係があり、依存関係があるセル同士はそのセルにマウスオーバーされると依存関係があるセル全ての色を変更したいと思っています。 いろいろと探しているのですが、見つかりません。 以下のようなサンプルで 1 と 4 が一緒に変更できないものでしょうか。 よろしくお願いします。 <html> <head> <title>テーブルの色を変える</title> <script language="JavaScript"> <!-- // b_color(idname,cn); // 背景色を変える // idname: 色変更したいタグid; // cn:色変更法 function b_color(idname,cn) { // alert(idname); // debug alert if (document.getElementById) { document.getElementById(idname).style.backgroundColor = cn; }else{ // alert("あなたのブラウザには対応しておりません。"); } } if (! document.getElementById) { document.write("あなたのブラウザには対応しておりません。マウスを動かしても色は変えられません。<br>"); // マウス移動でいちいちalertが出ると煩わしいので、最初に表示しておく } //--> </script> </head> <body> <table border="1"> <tr> <td id="11" bgcolor="#cccccc" onMouseOver="b_color('11','#ff0000');" onMouseOut="b_color('11','#0000ff');">ここ1</td> <td>ここ2</td> </tr> <tr> <td>ここ3</td> <td id="11" bgcolor="#cccccc" onMouseOver="b_color('11','#ff0000');" onMouseOut="b_color('11','#0000ff');">ここ4</td> </tr> </table> </body> </html>

  • openerの関係が崩れてしまった場合の関数呼び出し

    javascript の関数の呼び出し方法について質問です。 A.htmlからwindow.open で開かれたB.htmlがあります。 A.htmlにある test() という関数を呼び出したいい場合、 window.opener.document.test(); となると思いますが、 B.htmlを開いている状態で、A.html上に違うページを開いたとき、 openerの関係が崩れてしまうためか、B.htmlの window.opener.document.test();  の部分で「書き込み出来ません」というスクリプトエラーが発生してしまいます。 opener を使用しないで関数を呼び出すことはできるでしょうか?

  • class指定したHTML要素の背景色を変えるには

    HTML文書中で,class指定した要素の背景色を変更するには,どのようにしたら良いのでしょうか。 例: <div id="HOGE"> <p class="hoge"> Hellow! </p> </div> id指定の要素に対しては, document.getElementById('HOGE').style.backgroundColor="red"; として成功しましたが,class="hoge"に対してはどのように指定すれば良いのかわかりません。 よろしくお願いします。

専門家に質問してみよう