0

フォームの値を XML に変換しようとしています。スクリプト全体は Chrome などでは問題なく動作しましたが、IE8 ではもちろん台無しにしなければなりませんでした。IE が追加機能でエラーをスローしていたため、最初にコードを変更する必要がありました (明らかに、XML 要素ではなく HTML 要素を作成していたようです。だから今では、すべてが XML であり、IE はもう泣き言を言っていないと思います。 XML を文字列に変換すると、Chrome と IE の両方が undefined を返します (chrome は実際にはコンソールに空白行を表示します。

私は何を間違っていますか?

 function xmlToString(xmlData) { 

    var xmlString;
    //IE
    if (window.ActiveXObject){
    xmlString = xmlData.xml;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else{
    xmlString = (new XMLSerializer()).serializeToString(xmlData);
    }
    return xmlString;
}   


function saveValues(thisB,formName){
       var xpath = $(thisB).attr("xpath");
       var returnToServer = $(thisB).attr("returnToServer");
       var version = $(thisB).attr("version");
       var now= Math.round(new Date().getTime() / 1000)
       var $root = $($.parseXML("<XMLDocument />").getElementsByTagName('*')[0]);
       var $valuesEl = $($.parseXML('<saveValues xpath="'+xpath+'" returnToServer="'+returnToServer+'" version="'+version+'"></saveValues>').getElementsByTagName('*')[0]);
           $("input").each(function(){
           var name = $(this).attr("name");
               if(name != 'xmlToPost'+formName && name != 'saveValuesButton'){
                   if( $(this).attr("type") == 'text'  || (($(this).attr("type") == 'checkbox' || $(this).attr("type") == 'radio') && $(this).is(":checked"))){
                       $valueEl = $($.parseXML('<value datetime="'+now+'" version="'+version+'" name="'+name+'"></value>').getElementsByTagName('*')[0]);
                       $valuesEl.append($valueEl);
                }
           }
       });

        $root.append($valuesEl);
        var valuesXML = xmlToString($root);
        var postToXMLContent = $("#xmlToPost"+formName).val();
        valuesXML = valuesXML.replace(/savevalues/gi,"saveValues");
        valuesXML = valuesXML.replace("returntoserver","returnToServer");
        //..rest of code
    }

$root オブジェクトをログに記録すると、Chrome は で始まる大きなオブジェクトを提供します[<xmldocument>, context: <xmldocument>]。これを拡張して、saveValues などを含む子ノードを見つけることができます。IE では[object Object].

4

1 に答える 1

1

XML シリアライザーは、jQuery ラッパーではなく、XML ドキュメントを想定しています (Chrome でログに記録されていることがわかります)。を使用しますxmlToString($root[0]);

いずれにせよ、jQuery は明らかに XML で動作するように設計されていないように見えるので、単純な DOM メソッドを使用することしかお勧めできません。それはあなたのコードをはるかに短くします。

于 2012-12-07T09:44:46.623 に答える