在检查了jQuery源代码之后,我发现我遇到的问题是因为replaceWith
调用html
而不是XML文档。 replaceWith
不应该在XML文档上工作吗?
我发现这个公认的简单解决方法,以防将来有人需要它,这将完成我想要做的事情:
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
答案 0 :(得分:2)
这看起来像replaceWith()
的设计限制或错误。
当我跑步时:
$(xml).find('b').replaceWith(function() {
return '<c>yo</c>';
})
我收到"this[0].innerHTML is undefined"
个例外。 See this jsFiddle
钻入xml
,b
节点没有innerHTML成员 - 这有点意义,因为它不是HTML。 ;)
因此,看起来replaceWith()
可能并不总是与XML相配。 Consider reporting a bug
答案 1 :(得分:0)
是肯定的。这是旧的bug,它仍然存在。你可以解决它:
$.ajax
dataType: "xml"
...
success: (data) ->
$(data).find("section").each ->
ugly_but_working_clone = $($(".existing_dom_element").append(this).html())