Onks tässä jotain vikaa? Miks en saa tuosta layout.html:stä body:a?
Eli miks test.find("body").size() palauttaa nolla, vaikka kys. dokumentissa body on?
$.get(path+'layout.html', function(layout){ var test = $(layout); alert(test.find("body").size()); // 0 }, "html");
Eikö jQueryllä toimi jotankin oikein kokonaisen html documentin syöttäminen $()-funktioon?
Edittiä:
jQuery näköjään käsittelee joitakin html-tageja erityisesti.
Seuraava alerttaa tyhjää:
var test = $('<div><body>asd</body></div>'); alert(test.find("body").text());
Mutta vastaavasti, jos muutan bodyn -> span, tulostuu "asd".
Voiko jQueryssä määrittää jotenkin, että dokumenttia käsitellään kuten xml:ää, eikä tehdä mitään poikkeuskäytäntöjä riippuen tagin nimestä / roolista html:ssä?
Edit2:
Ratkaisu tais löytyä. Ei riitä edes, että määrittää $.ajax kutsussa dataType:n "xml":ksi, vaan ratkaisu löytyy nimeämällä haettava dokumentti .xml-päätteiseksi. Eli ilmeisesti jQueryn käyttäytymiseen vaikuttaa palvelimen palauttamissa headereissa määritellystä dokumentin tyypistä.
Mutta, ratkaisu ei toimi IE:llä.. Ideoita?
No onko se dokumentti validia XML:ää?
Jos kuvauksesi ongelmasta pitää paikkansa, pulman voi kiertää etsimällä tekstistä body-tagin sisällön ja vaihtamalla ympärille vaikka div-tagin.
// Nollatavujen sallimiseksi voi muuttaa ([^\0]*) -> (([^\0]*\0*)*) var body = teksti.match(/<body.*?>([^\0]*)<\/body>/)[1]; $("<div>" + body + "</div>");
Aihe on jo aika vanha, joten et voi enää vastata siihen.