да. это старая ошибка, и она все еще существует. Вы можете обойти это:

в исходный код 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

Ответы на вопрос(2)

Ваш ответ на вопрос