2011-07-09 24 views
6

jQuery kaynağını inceledikten sonra, XML belgelerinde bulunmayan replaceWith numaralı aramaların neden olduğunu anlıyorum. replaceWith XML belgelerinde çalışmaması gerekiyor mu?XML sorunuyla değiştirme XML sorunu için

Kimsenin gelecekte ihtiyacı durumunda, bu kuşkusuz basit çözüm bulduk

, yapmak ne çalışıyorum gerçekleştirmek olacaktır:

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 
}); 

Ama yine neden kolay yolu bilmek istiyorum çalışmıyor


jQuery hakkında fazla bir şey bilmiyorum, ancak bu işe yaramalı mıyım? başarısız ve <a></a> temsil <a><c>yo</c></a> temsil

xml = $.parseXML('<a><b>hey</b></a>') 
$(xml).find('b').replaceWith('<c>yo</c>') 

yerine xml. Ben yanlış bir şey mi yaptım? JQuery 1.6.2 kullanıyorum.

Düzenleme: Bir yan not olarak

, ben replaceWith işlevi sürümünü kullanın şöyle denerseniz:

TypeError: Cannot call method 'replace' of undefined 

:

$(xml).find('b').replaceWith(function() { 
    return '<c>yo</c>' // doesn't matter what I return here 
}) 

bu hatayı alıyorum Düzenleme 2:

replaceAll ancak çalışır, ancak ben bu yüzden bu razı edemez işlev sürümünü kullanmanız gerekir:

$('<c>yo</c>').replaceAll($(xml).find('b')) // works 

Edit 3:

Bu aynı zamanda çalışır:

xml.find('b').replaceWith($('<c>yo</c>')) // but not with the $() around the argument 

cevap

2

Bu, replaceWith() ile bir tasarım sınırlaması veya bir hataya benziyor.

Ben çalıştırdığınızda:

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

Ben "this[0].innerHTML is undefined" istisna olsun. See this jsFiddle. HTML olmadığından, biraz mantıklı -

xml içine delme, b düğüm bir innerHTML bulunmamaktadır. ;)

replaceWith(), XML ile her zaman güzel oynamamak gibi görünebilir. Consider reporting a bug.

+0

Bu değeri bildirmeyi düşünür müsünüz? –

+0

@Seth: Tabii, neden olmasın? En kötüsü, "düzeltmeyecek" olmanız ve en azından sorunun belgelenmesidir. –

+0

Evet. Makul insanların beklediği gibi ya da belgelerin ima ettiği gibi işe yaramıyor. Sadece göndermeden önceki hataları arayın (ben * hızlı * arama yaptım ve hiçbir şey görmedim). –

0

evet. Bu eski bir böcek ve hala var. Bu sorunu giderebilirsiniz:

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