javascriptで操作されたtableを書き出したい



0   名前: たまごクラブ : 2007/04/05(木) 07:53  ID:Ji0blfRq sub-99
またお世話になります。
javascriptで操作されたtableを書き出したいと考えたのですが、W3C ドキュメントオブジェクトモデルでは element.outerHTML はサポートされていないとの事。
理想は
alert (document.getElementById("table1").outerHTML);
この様な感じで書き出せればと考えています。

element.outerHTML の汎用性がある書き方を教えて頂けませんでしょうか。

1   名前: たまごクラブ : 2007/04/05(木) 07:53  ID:Ji0blfRq sub-99
alert (document.getElementById("table1").innerHTML);
にすれば Gecko でもサポートできると解りました。
これで IE、Netscape がOKだと思うのですが、私の環境では他のブラウザでの対応が解りません。
この書き方でほぼいけるのでしょうか?

2   名前: 匿名 : 2007/04/05(木) 07:53  ID:a5OrGWWI sub-Ds
ほぼいけるでしょうね。しかし、

>W3C ドキュメントオブジェクトモデルでは ・・・
とおっしゃるのであれば正しい書き方とはいえません。

3   名前: たまごクラブ : 2007/04/05(木) 07:53  ID:Ji0blfRq sub-99
匿名様、助言ありがとうございます。
仰る通り正しい形では無いのだろうと類推いたします。
innerHTML を使う事が次善の対応でしかない事も承知しております。
しかしながら(勝手な言い訳だとは思いますが)不勉強な為、正しい書き方が理解できません。

どうか、正しい書き方をご教授頂けますでしょうか。

4   名前: 匿名 : 2007/04/05(木) 07:53  ID:wqq6p95j sub-Cz
> 正しい書き方

HTML と違い、DOM は実装の拡張を認めてるんだけど(そうでないといろいろ厳しい)。

個人的な見解ならば、そもそも安易に文字列操作すべきではない。せっかくタグ付き文字列(XML/HTML ドキュメント)をパースしてオブジェクトツリー(DOM ドキュメント)に変換したのに、もう一度タグ付き文字列に戻すというのは、相当の理由がなければならない。

DOM Level 3 Load and Save(現状 Opera のみ):
var node = document.getElementById ('table1');

if (document.implementation &&
//  document.implementation.hasFeature ('Core', '3.0') &&
    document.implementation.hasFeature ('LS', '3.0')
) {
    var serializer = document.implementation.createLSSerializer ();
    
    // 出力形式の制御
//  serializer.domConfig.setParameter ('canonical-form', true);
//  serializer.domConfig.setParameter ('format-pretty-print', true);
//  serializer.newLine = '\u000c\u000a';
    
    var result = serializer.writeToString (node);
}

XMLSerializer(Firefox、Opera、Safari):
var node = document.getElementById ('table1');

if (typeof XMLSerizlier != 'undefined') {
    var serializer = new XMLSerializer;
    
    var result = serializer.serializeToString (node);
}

HTMLElement.outerHTML(IE、Opera、Safari)
var node = document.getElementById ('table1');

if ('outerHTML' in node) {
    var result = node.outerHTML; // 出力形式は実装依存
}

なお、HTMLElement.innerHTML に関しては、IE 以外でも Firefox、Opera、Safari で (X)HTML ドキュメントを扱う場合なら使用できる。ただし、出力形式は実装依存。特に table 要素の場合、例えば tbody 要素のタグを書き出すかどうか、なんてのは予測できない(DOM3 LS はその制御も可能だが、対応ブラウザがほとんどない)。

まあ、もともと入出力関連は実装依存の部分が大きいから。

5   名前: 匿名 : 2007/04/05(木) 07:53  ID:wqq6p95j sub-Cz
>>4
訂正(DOM3 LS):
//  serializer.newLine = '\u000d\u000a';  // CR+LF

一覧へ戻る