jQuery ソースを調べたところ、問題はXML ドキュメントに対して存在しないreplaceWith
呼び出しが原因であることがわかりました。XML 文書では動作しないはずですかhtml
?replaceWith
将来誰かがそれを必要とする場合に備えて、私がやろうとしていることを達成する、この確かに簡単な回避策を見つけました:
xml.find('b').each(function() {
$(this).replaceWith($('<c>yo</c>')) // this way you can custom taylor the XML based on each node's attributes and such
});
しかし、なぜ簡単な方法が機能しないのかを知りたいです。
jQuery についてはよくわかりませんが、これでうまくいくのではないでしょうか?
xml = $.parseXML('<a><b>hey</b></a>')
$(xml).find('b').replaceWith('<c>yo</c>')
xml
を表す代わりに、<a><c>yo</c></a>
失敗して を表し<a></a>
ます。私は何か間違ったことをしましたか?jQuery 1.6.2 を使用しています。
編集:
補足として、の関数バージョンを使用しようとするとreplaceWith
、次のようになります。
$(xml).find('b').replaceWith(function() {
return '<c>yo</c>' // doesn't matter what I return here
})
次のエラーが表示されます。
TypeError: Cannot call method 'replace' of undefined
編集2:
replaceAll
ただし、機能しますが、関数バージョンを使用する必要があるため、これで解決することはできません:
$('<c>yo</c>').replaceAll($(xml).find('b')) // works
編集3:
これも機能します:
xml.find('b').replaceWith($('<c>yo</c>')) // but not with the $() around the argument