• ベストアンサー

netscapeでもinnerTextやinnnerHTMLと同様にテーブルのセル内の値を設定する方法

テーブル内の特定のセルに文字列を設定するために、 (1) ブラウザの種別を識別し、 (2) IEの場合には、   mytable.rows[0].cells[0].innerText = "abcdef";   その他のブラウザの場合には、   mytable.rows[0].cells[0].innerHTML = "abcdef"; としています。 注 mytable: テーブルに付与したid   abcdef: セルに設定される文字列の一例 しかし、ネットスケープの場合には、 innerTextとinnerHTMLとの何れもサポートされていないため、困っています。 ネットスケープでも、上記処理と同等の処理を実現する方法 を教えて下さい。 よろしくお願い致します。

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

IDをいきなり書いてエレメントオブジェクトと解釈してくれるブラウザばかりではないので いきなりIDを書いてアクセスしようとせず、 きちんと var mytable = document.getElementByID('mytable'); と、取得した後 mytable.rows[0].cells[0]. ~ と操作してみてください。 ツール>web開発>Javascriptコンソール、とすれば エラー内容を確認できます。(たぶん mytable is not defind になっていると思います)

tfj3116
質問者

お礼

早速、ご指導頂きありがとうございます。 全く、ご指摘の通りでした。 IDをいきなり書いていたために正常に作動していなかったようです。 教えて頂いた通りに対処して無事解決致しました。 本当に助かりました。 今後とも、どうかよろしくお願い致します。

その他の回答 (4)

  • arexis
  • ベストアンサー率66% (66/99)
回答No.5

あ、間違ってた・・ innerText の取り出し関数作るとしたら function GetinnerText(a){ return a.innerText || a.textContent;} です。 あと、innerHTML と innerText は文字列の扱いが違うので、同じ物のつもりで使ってはだめですよ。

回答No.4

バージョンはいくつですか? 4.xはinnerHTMLをサポートしてなかったような気がしますが。。。 古いブラウザなので忘れました。 エラーメッセージはなんと書かれてますか? (ほんとうにinnerHTMLでエラーになっているのか、同じ行というだけで、他のキーワードでエラーになっているのか) Operaはrows、cellsは配列として使用出来ませんが、同様に、 rows[0]ではなく、rows.item(0)、またはrows(0) cells[0]ではなく、cells.item(0)、またはcells(0) ではいかがでしょうか。 IEで動かないので、ブラウザごとに振り分けて下さい。 Firefox、Safariはrows(0)、cells(0)が動きません。 未検証です。 getElementsByTagName('tr')やchildNodes[0]の方が簡単に扱えることがあります。

tfj3116
質問者

お礼

早々と詳細なご教示を頂きありがとうございます。 ヴァージョンは7.1です。 教えて頂いたことは、なるべく多くの古いブラウザでも 正常にアクセスできるサイトとする上で、 たいへん参考となります。 自分のノートに盛り込み、多いに活用させて頂きます。 今後とも、どうかよろしくお願い致します。

  • arexis
  • ベストアンサー率66% (66/99)
回答No.3

innerHTMLの方は既に書かれてる通りID指定の問題。 innerTextの方は、FireFoxなら textContnet です。 でもNetscapeはどちらも駄目っぽいので方法が無いのかな?(不明)。 他にないとして・・・Netscapeまで含める場合は var mytable = document.getElementById('mytable'); mytable.rows[1].cells[0].innerHTML = ""; mytable.rows[1].cells[0].appendChild( document.createTextNode('abcde') ); の様にtextNodeにして入れ込むのがブラウザを選ばない方法ですかね。 入れ込みはこれで良いとしても、取り出しの場合 function GetinnerText(a){ return a.innerHTML || a.textContent;} のような物を作っておいて GetinnerText(HTMLオブジェクト) で、HTMLオブジェクトが内包する表示テキストは取れますが、、 NetscapeでinnerText同等を取り出す時どうするんだろ? ^^;

tfj3116
質問者

お礼

arexis様、たいへん申し訳ありません。 早々と教えて頂いたにもかかわらず、 arexis様が投稿された内容を見落とし、 本件の質問を締め切る今になって気が付きました。 教えて頂いたことは、たいへん勉強になりました。 ありがとうございます。 今後ともどうかよろしくお願い致します。

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

ん~・・・どのブラウザでもinnerHTMLでアクセスできましたけど・・・ <script> window.onload=function(){ var mytable=document.getElementById("mytable"); mytable.rows[0].cells[0].innerHTML = "abcdef"; } </script> <table id="mytable"> <tr> <td>test</td> <td>test</td> <td>test</td> </tr> <tr> <td>test</td> <td>test</td> <td>test</td> </tr> <tr> <td>test</td> <td>test</td> <td>test</td> </tr> </table>

tfj3116
質問者

お礼

早速、回答頂きありがとうございます。 innerHTMLは、最近のメジャーな大半のブラウザで有効に作動するのですね。 たいへん参考となりました。 ご親切に甘えるようですが、 もし、主要なブラウザの内、 innerHTMLが作動しないブラウザのヴァージョンや これに関するよい文献などがありましたら、 是非、教えて下さい。 今後とも、どうかよろしくお願い致します。

関連するQ&A