こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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との何れもサポートされていないため、困っています。

ネットスケープでも、上記処理と同等の処理を実現する方法
を教えて下さい。

よろしくお願い致します。

投稿日時 - 2008-02-29 16:54:47

QNo.3820548

すぐに回答ほしいです

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

IDをいきなり書いてエレメントオブジェクトと解釈してくれるブラウザばかりではないので
いきなりIDを書いてアクセスしようとせず、
きちんと
var mytable = document.getElementByID('mytable');
と、取得した後
mytable.rows[0].cells[0]. ~ と操作してみてください。

ツール>web開発>Javascriptコンソール、とすれば
エラー内容を確認できます。(たぶん mytable is not defind になっていると思います)

投稿日時 - 2008-02-29 17:52:15

お礼

早速、ご指導頂きありがとうございます。

全く、ご指摘の通りでした。
IDをいきなり書いていたために正常に作動していなかったようです。

教えて頂いた通りに対処して無事解決致しました。

本当に助かりました。
今後とも、どうかよろしくお願い致します。

投稿日時 - 2008-02-29 18:52:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

あ、間違ってた・・

innerText の取り出し関数作るとしたら
function GetinnerText(a){ return a.innerText || a.textContent;}

です。

あと、innerHTML と innerText は文字列の扱いが違うので、同じ物のつもりで使ってはだめですよ。

投稿日時 - 2008-02-29 19:13:42

ANo.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]の方が簡単に扱えることがあります。

投稿日時 - 2008-02-29 18:35:13

お礼

早々と詳細なご教示を頂きありがとうございます。

ヴァージョンは7.1です。
教えて頂いたことは、なるべく多くの古いブラウザでも
正常にアクセスできるサイトとする上で、
たいへん参考となります。

自分のノートに盛り込み、多いに活用させて頂きます。

今後とも、どうかよろしくお願い致します。

投稿日時 - 2008-02-29 18:58:44

ANo.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同等を取り出す時どうするんだろ? ^^;

投稿日時 - 2008-02-29 18:27:55

お礼

arexis様、たいへん申し訳ありません。

早々と教えて頂いたにもかかわらず、
arexis様が投稿された内容を見落とし、
本件の質問を締め切る今になって気が付きました。

教えて頂いたことは、たいへん勉強になりました。
ありがとうございます。

今後ともどうかよろしくお願い致します。

投稿日時 - 2008-03-29 11:01:54

ANo.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>

投稿日時 - 2008-02-29 17:40:30

お礼

早速、回答頂きありがとうございます。

innerHTMLは、最近のメジャーな大半のブラウザで有効に作動するのですね。
たいへん参考となりました。

ご親切に甘えるようですが、
もし、主要なブラウザの内、
innerHTMLが作動しないブラウザのヴァージョンや
これに関するよい文献などがありましたら、
是非、教えて下さい。

今後とも、どうかよろしくお願い致します。

投稿日時 - 2008-02-29 18:47:13

あなたにオススメの質問