2011-12-02 5 views
0

私は次のためのjQueryを使用したくない:XMLノードのフラット文字列表現を取得するためのデフォルトのメカニズムはありますか?

私は、次のXML

<parent> 
    <a >some text 
     <b propA="foo">some more text 

     </b> 
     and more text still 
    </a> 
    </parent> 

を持っていたし、

//擬似のような何かを呼び出すしたい場合は...私は渡しますノード1ノード0は役に立たない空のテキストノードであるので...

getFlatXMLAsString(parent.childNodes [1])

と受信見た目の文字列"<a>some text\n<b propA="foo">some more text\n\n</b>and more text still</a>"

XMLをフラットな文字列に変換するだけで、ノードの独自の開始タグと終了タグが含まれていることに注意してください(属性があれば、それも同様に含まれます)。

明らかに私はこれを手動で行うことができますが、ホイールを再発明するのを妨げるメカニズムが組み込まれていることを期待していました。

答えて

3

はこれを行うにはhereクロスブラウザの方法は、私が正しく質問を理解している場合である

function outerHTML(node){ 
    // if IE, Chrome take the internal method otherwise build one 
    return node.outerHTML || (
    function(n){ 
     var div = document.createElement('div'), h; 
     div.appendChild(n.cloneNode(true)); 
     h = div.innerHTML; 
     div = null; 
     return h; 
    })(node); 
    } 

のように見えました。

+0

はい、まさに私が欲しかったことです、ありがとう! –

1

MozillaおよびWebkitブラウザでは、XMLSerializerを使用できます。ちょうどオブジェクトテストをしてください。

他のブラウザではどのような機能が利用できるのか分かりませんが、それがある可能性があります。

最悪のシナリオでは、すべてのノードをウォークして文字列に書き込む関数を手作業で作成する必要があります。 This answerを開始する必要があります。その答えによると

+0

私はこれが私が求めていることはしないと思います。私が渡すノードの子であるXMLのフラット化されたバージョンを得ることを目指していることに注意してください。すべての角かっこや属性などが含まれます。私は、内部ノードを取り除くために探していない、私はそれらの平坦な文字列表現を取得するために探しています。私の質問では、私は私の関数から戻って、ノードで渡されると期待するものの例を提供します。 –

+0

ああ、XMLをシリアル化したいですか?残念ながら、これはあなたがどのような環境にいるかによって異なります。このJSをブラウザで実行していますか? –

+1

私は午前。そしてあなたが想像するように、それはクロスブラウザでなければなりません。私はちょうど自分自身をロールバックすべきだと思っています...本当に単純な再帰的な方法です、実際には、私は数年前にそれを書いています。また、IEはXMLと同じDOMを扱うので、親ノードのinnerHMTLを呼び出すだけで、自分が望むものを得ることができるかもしれません。私はそれがどんな非ラップブラウザでも動作するとは思わない:) –