過去ログ表示


過去ログ 202 を表示

トピック内全 12 記事中の 1 〜 10 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0] [1]

Web 非標準の innerHTML を使いたくない
(#32000) このトピック中1番目の投稿
(環境: WinXP SP2/Firefox1.5)

 今現在 Ajax の勉強のためにそのための Web ページを作っています ( ローカルでテストできないので )。

 で、質問なのですが、今現在以下の方法をとって HTML コンテンツを構築しています。

1.XMLHttpRequest オブジェクトの responseText プロパティにより、外部ファイルにしている、HTML コンテンツの一部をサーバから取得している。

2.innerHTML プロパティにサーバから取得したテキストを放り込み、HTML コンテンツを完成させている。

 ところがですね、W3C の DOM1 仕様書には、innerHTML というプロパティに関する記述がありません。つまり DOM1 の仕様外の UA 依存のローカル仕様のプロパティだということです。

 わたしがしたいのは Web 標準に法った Ajax の実装です。ですからサーバから取得したテキストを、DOM の Node に変換してやる必要があります。

 しかしその方法がわからないんです。どなたかご存じありませんか。xhtml に完全に移行するという選択肢は UA の実装状況から見て現実的ではありません。

 どなたかいい方法をご存じでしたら、是非ともご教示くださいませんか?

P.S.
 なぜ Web 標準準拠を標榜する Gecko が innerHTML をサポートしているのか不思議でなりません。

Re[1]: Web 非標準の innerHTML を使いたくない
(#32001) このトピック中2番目の投稿
(環境: WinXP SP2/Firefox1.5)

2006/06/13(Tue) 19:31:15 編集(投稿者)

きちんと読んでないのですが
http://www.din.or.jp/~hagi3/JavaScript/JSTips/Mozilla/docwrite.htm
辺りが使えそうです?!
私もinnerHTML使ってました。リンク先にMozillaがinnerHTMLをサポートする
経緯に軽く触れられているんですけど、これから先のVerではどうなるんですかね・・・。

追記:
ぐぐっただけなのでおおやまさんも該当ページをご覧かとおもいますが。
自戒の念もこめて。

Re[2]: Web 非標準の innerHTML を使いたくない
(#32002) このトピック中3番目の投稿
(環境: WinXP SP2/Firefox1.5)

> ぐぐっただけなのでおおやまさんも該当ページをご覧かとおもいますが。

 いえ、ググッても発見できてませんでした。教えていただいてありがとうございます。ちょっと時間をかけて読んでみます。
 _dom とか見慣れないものが書かれているので。

Re[3]: Web 非標準の innerHTML を使いたくない
(#32004) このトピック中4番目の投稿
(環境: WinXP SP2/Firefox1.5)

 ソースを読んでみましたが、私のやりたいことは残念ながらできないですね。
 ちょっと Gecko のパーサについて調べてみます。

Re[4]: Web 非標準の innerHTML を使いたくない
(#32012) このトピック中5番目の投稿
(環境: WinXP SP2/Firefox1.5)

>  ソースを読んでみましたが、私のやりたいことは残念ながらできないですね。
そうですか。残念です。
的外れながら・・・。
前出のサイト等を参考にinnerHTMLの代替処理をしてみました。
ブラウザの判定が無い!とか、htmlが非標準だ!などと突っ込まないように(w

----以下サンプル----
<html>
<head>
<title>test</title>
<script type="text/javascript">
var hoge1_count = 0;
var hoge2_count = 0;
function hogeAdd1(){
hoge1_count++;
document.getElementById("DIVID").innerHTML = "HOGE" + hoge1_count;
}
function hogeAdd2(){
hoge2_count++;
div_el = document.getElementById("DIVID");
for( var i=div_el.childNodes.length ; i>0 ; i-- ){
div_el.removeChild(div_el.childNodes.item(i-1));
}

var mytext = document.createTextNode("hoge"+hoge2_count);
div_el.appendChild(mytext);
/* -- タグも追加する場合 -------
var new_el=document.createElement('P');
new_el.setAttribute('id', "NEWID");
new_el.appendChild(mytext);
new_el.setAttribute('class',"NEWCLASS");
div_el.appendChild(new_el);
-------------------------------- */
}
</script>
</head>
<body>
<div id="DIVID">
this is test
</div>
<br>
<a href="javascript:hogeAdd1()">Use innerHTML</a>
<a href="javascript:hogeAdd2()">Use appendChild</a>
</body>
<html>

Re[1]: Web 非標準の innerHTML を使いたくない
(#32024) このトピック中6番目の投稿
(環境: Win2000/Firefox1.5)

>  今現在 Ajax の勉強のためにそのための Web ページを作っています ( ローカルでテストできないので )。

ローカルでテストするなら、AnHTTPD などのサーバを使うと手っ取り早いですよ。
ただし、ファイアウォールで外部からのアクセスを遮断しておくのをお忘れなく。

>  わたしがしたいのは Web 標準に法った Ajax の実装です。ですからサーバから取得したテキストを、DOM の Node に変換してやる必要があります。
>
>  しかしその方法がわからないんです。どなたかご存じありませんか。xhtml に完全に移行するという選択肢は UA の実装状況から見て現実的ではありません。

参考になるか分かりませんが、
innerHTML と DOM 実装を比較したページがあります。
ソースを見比べれば、なんとなく分かると思います。

Alternatives to innerHTML
http://slayeroffice.com/articles/innerHTML_alternatives/


HTML ページを直接扱うなら、AHAH(あはー?) なんてのもあります。

AHAH: Asychronous HTML and HTTP
http://microformats.org/wiki/rest/ahah

Re[5]: Web 非標準の innerHTML を使いたくない
(#32026) このトピック中7番目の投稿
(環境: WinXP SP2/Firefox1.5)

 サンプルまで書いていただいてありがとうございます。
 実は、読み込んだファイルを DOM で解析してエレメントに分解するところでつまずいています。
 元々の HTML ファイルにエレメントを追加する方法はわかってはいるのですが。

 とりあえず、今現在、試行錯誤中です。

 まずは御礼まで。

Re[6]: Web 非標準の innerHTML を使いたくない
(#32031) このトピック中8番目の投稿
(環境: WinXP SP2/Firefox1.5)

>  まずは御礼まで。
いえいえ。こちらこそありがとうございます。
私もAjax勉強中ですので良い勉強になりました。
<<innterHTMLが非標準かつなぜかMozilla実装とか考えもしませんでした。

>  実は、読み込んだファイルを DOM で解析してエレメントに分解
私はルートとなる要素名を使用してgetElementByTagNameによって
ノード(今の場合はルート?)を取り出した後に、
nodeType=3 (TextNode)かつ、parentLength=1になるところまで
再帰的に子ノード読み進んで、そのときの親ノードの持つ子ノード数
(xxx.parentNode.chidlNodes.length)とnodeValueを
取り出すことで読み込みました。
読み込み元のファイル(私の場合はxml)は自前で用意したもので
ある程度整理されている、という前提で作りこんだので
予想不能なファイルの読み込みには使えないかもしれませんが
参考になれば。

Re[7]: Web 非標準の innerHTML を使いたくない
(#32041) このトピック中9番目の投稿
(環境: WinXP SP2/Firefox1.5)

2006/06/14(Wed) 23:07:50 編集(投稿者)

> <<innterHTMLが非標準かつなぜかMozilla実装とか考えもしませんでした。

 innterHTML の発祥の源は実は ie なんですよ。もともと Gecko になかったものなので、なぜ最近になって Web 非標準 プロパティを組み込んだのか、素朴に疑問に思ったんです。

 まあ、それを言い出すと maquee とか blink が、組み込まれているという、現実をどう説明すんねん、という気持もあったりして。いや中国市場を意識してのことだとは知ってるんですけど、DOM まわりまで非標準に対応する必要があるのか、疑問に思ったので。

 でも innterHTML を使えると、たしかに楽なんですけどね。

> 再帰的に子ノード読み進んで、そのときの親ノードの持つ子ノード数
> (xxx.parentNode.chidlNodes.length)とnodeValueを
> 取り出すことで読み込みました。

 試行錯誤の上、やっと自力でそこまで来ました。やっぱり関数の再帰呼び出しで正解ですね。

 あとはなんとかなりそうです。ありがとうございました。
済!
Re[8]: Web 非標準の innerHTML を使いたくない
(#32046) このトピック中10番目の投稿
(環境: WinXP SP2/Firefox1.5)

済 になっているところに続けて申し訳ないですが、興味のあるところなので。

> Web 標準に法った Ajax の実装です。ですからサーバから取得したテキストを、DOM の Node に変換してやる必要があります。

そもそも XMLHttpRequest が標準ではないのでは… というツッコミはさておき。

> やっぱり関数の再帰呼び出しで正解ですね。

ということで解決したようですが、それは

> サーバから取得したテキストを、DOM の Node に変換してやる必要があります。

の後の話ですよね。
「テキストを、DOM の Node に変換してやる」のは、どうやって解決したのでしょうか。
ここで「テキスト」というのは、おそらく XML とは限らないテキストなんですよね?
(XML であれば、responseText ではなく responseXML を使えば済むので。)

IFRAME か何かに読み込めば、自動的に DOM ツリーができあがりますが
これはちょっと、気持ちのいい方法ではないし…


[ 次のトピック内容10件 ]
このトピックの全ページ / [0] [1]

返信不可


- Child Tree -