заменить на проблему XML - PullRequest
6 голосов
/ 09 июля 2011

После изучения источника 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.

Edit:

В качестве примечания, если я попытаюсь использовать версию функции 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 ]

2 голосов
/ 09 июля 2011

Это выглядит как ограничение дизайна с replaceWith() или ошибка.

Когда я запускаю:

$(xml).find('b').replaceWith(function() {
    return '<c>yo</c>';
})

Я получаю исключение "this[0].innerHTML is undefined". См. Этот jsFiddle .

Детализация в xml, узел b не имеет члена innerHTML - что имеет небольшой смысл, так как это не HTML.;)

Таким образом, похоже, что replaceWith() не всегда хорошо работает с XML. Рассмотрите возможность сообщения об ошибке .

0 голосов
/ 21 мая 2012

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

$.ajax
  dataType: "xml"
  ...
  success:  (data) ->
    $(data).find("section").each ->
      ugly_but_working_clone = $($(".existing_dom_element").append(this).html())
...