2011-11-10 3 views
9

私は新しい$.parseXML()メソッドをjQuery 1.5で使用しています。新しい要素をXMLオブジェクトに挿入すると、その新しい要素は自動的に値「http://www.w3.org/1999/xhtml」を持つ「xmlns」属性を取得します。例えば、以下のコードを参照してください。jQueryがXMLオブジェクトに 'xmlns'属性を挿入しないようにするにはどうすればよいですか?

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>')); 

コードは、以下の要素を作成します。

<five xmlns="http://www.w3.org/1999/xhtml">some value</five> 

にはどうすれば「のxmlns」属性を挿入するから、jQueryのを防ぐのですか?私は.removeAttr()メソッドを使ってみましたが、うまくいかないようです。何か案は?

更新: ユーザーnrabinowitzがこの問題を解決するのに役立ったという提案。トップレベル要素にxlmns属性を追加すると、xlmns属性が各新しい要素に自動的に割り当てられなくなります。それでも、私は私の特定のプログラムのための別の解決策を選んだ。代わりに、メソッドを使用してXMLオブジェクトを(Webページに表示される)文字列に変換した後で、すべてのxlmns属性を削除しました。

+3

ルート要素に独自のXMLNS属性を追加しようとしましたか?明示的な名前空間がない場合、jQueryのデフォルトはXHTMLです。 – nrabinowitz

+3

jQuery自体は、XML解析を全く行っていないと思います。代わりに、ブラウザがそれを行うことができます。 (もしjQueryに完全なXMLパーサが組み込まれていれば、それはさらに大きくなるでしょう:-) * edit * yupはソースをチェックしました。あなたのXMLを "DOMParser"インスタンスに渡すだけです。 – Pointy

答えて

3

は、あなたがこのように実行する必要があり

$(myXml).find('three').append('<five>some value</five>'); 
+0

これは私のために働いた、ありがとう。 – Chris

+0

も私のために働いていましたが、 'という要素に要素を追加しました。 – BobbyTables

+0

Chromeで完璧に機能しましたが、IE 11では何も追加されていません。それをテストしてください:http://jsfiddle.net/eygqwwgt/2/あなたは何故手掛かりを持っていますか? – Bjoerg

0

使用しよう:何が起こる

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 

myXml = $.parseXML(myXml); 

var el=xmlDoc.createElement("yourElement"); 

$(myXml).find('three').append($(el)); 
+0

あなたのソリューションは依然として "yourElement"タグ内に名前空間を与えます。参照:http://jsfiddle.net/Lzfg7zpv/ – Bjoerg

1

は、あなたが挿入されているノードが別の名前空間URIプロパティを持っていることです。

$($.parseXML('<node/>'))[0].namespaceURI 
// null 

$ .parseXML由来

ノードあなたの作成したノード

$('<node>')[0].namespaceURI 
// "http://www.w3.org/1999/xhtml" 

はあなたが作成したノードにも価値nullの名前空間URIを持っていると思います。

作成したノードをjQueryを使用して名前空間を継承させるには、元のノードを$('<five>some value</five>', myXml)のように$()の第2引数として指定します。

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>', myXml)); 
関連する問題