да. это старая ошибка, и она все еще существует. Вы можете обойти это:
в исходный код 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