AFAIK, element.property = function(){} is done in IE. On firefox and others
the new property is added to the prototype of the Class. Thats why when you
get the XML it comes 'extended' with the mootools methods.on jQuery the $() function doesnt return a real element node, it returns a jQuery object, that has the jQuery functions. Its a bad problem for Mootools, and i see no good way to solve it, but there might be a good way, without having to transform the xml in html, whish is buggy for IE. Fábio Miranda Costa Engenheiro de Computação http://meiocodigo.com On Mon, Jun 22, 2009 at 1:37 AM, Eneko Alonso <[email protected]>wrote: > Hi Fabio, > From what I know, you can't add properties to any node (XML or DOM) on IE > browsers. For example, you can't do var x = document.getElementById('x'); > x.y = function() {}; x = document.getElementById('x'); z.y(); > > As far as I know, that would work on Firefox, for example, but not on IE, > for sure. That's why we need to extend the objects every time we query them > (z = $('x')), right? > > What is weird is that the xml response from Request is already extended by > Mootools. This is, all methods like getElement are available on that object. > But for some reason it fails while transversing the xml tree (only on IE). > Maybe every node should be extended while is being tranversed? That would be > very slow, I guess. > > You can do jQuery('<xml><here/></xml>') and that parses the text and > enables the xml tree to be browsed. There is no way to do that in Mootools > that I know. The problem of using 'html', as csuwldcat posted, is that it > will fail with some node names like body, title, comment and other IE > reserved words. Also, it will fail if xml nodes have a prefix (like <x:y>) > if I'm not mistaken. > > Very tricky problem, I think. > > > > 2009/6/21 Fábio Costa <[email protected]> > > @csuwldcat >> your code works but it is buggy, some very strange bugs occur on ie while >> doing this. >> >> I see no option, i tryed to find stuff on the internet but found nothing. >> The best way to do these stuff is by using pure DOM traversing functions. >> >> The problem is that it is not possible to add properties to XML nodes on >> IE ($(xml) doesnt work, xml.func = function(){} doenst work, which is what >> mootools do). >> >> >> Fábio Miranda Costa >> Engenheiro de Computação >> http://meiocodigo.com >> >> >> On Fri, Jun 19, 2009 at 3:53 PM, csuwldcat <[email protected]> wrote: >> >>> >>> Hey guys try this: >>> >>> var destinationEl = new Element( 'div', { 'html': >>> responseXmlFromYourRequest } ); >>> destinationEl.getElements( 'somethingInTheXML' ).each( function( el ) >>> { >>> console.log( #someEl ); >>> } ); >>> >>> On Jun 19, 4:39 am, Fábio Costa <[email protected]> wrote: >>> > Ill really take a deep look at this. >>> > Thanks. >>> > >>> > Fábio Miranda Costa >>> > Engenheiro de Computaçãohttp://meiocodigo.com >>> > >>> > On Thu, Jun 18, 2009 at 6:52 PM, Eneko Alonso <[email protected] >>> >wrote: >>> > >>> > >>> > >>> > > Yep, that does not work... >>> > >>> > > I've been looking at jQuery's source code but I can't find how do >>> they >>> > > hanlde the XML so well for all browsers. >>> > > Any ideas? >>> > >>> > > I've seen some code to create a Request.XML class that basically >>> converts >>> > > the xml onto a DOM tree, but that has a bunch of issues on IE >>> browsers too, >>> > > as we have talked before (for example, IE wont let you create an >>> <image> >>> > > node). >>> > >>> > > 2009/6/18 Fábio Costa <[email protected]> >>> > >>> > >> extending the xml doesnt work, right?i mean like: >>> > >>> > >> $(xml).getElements........ >>> > >>> > >> Fábio Miranda Costa >>> > >> Engenheiro de Computação >>> > >>http://meiocodigo.com >>> > >>> > >> 2009/6/18 Fábio Costa <[email protected]> >>> > >>> > >>> Eneko thats a serious issue, im sure core devs are with an eye on >>> it.But >>> > >>> i *think *it only come for the 2.0 series. >>> > >>> > >>> Fábio Miranda Costa >>> > >>> Engenheiro de Computação >>> > >>>http://meiocodigo.com >>> > >>> > >>> On Thu, Jun 18, 2009 at 1:16 PM, Eneko Alonso < >>> [email protected]>wrote: >>> > >>> > >>>> The request response is plain xml with no comments.Mootools >>> getElement >>> > >>>> function does not work on IE browsers, I can't remember the JS >>> error right >>> > >>>> now. >>> > >>> > >>>> I'm trying to create an example, but I can't find how to parse an >>> xml >>> > >>>> string into an xml document in mootools. Any ideas? >>> > >>>> var xml = >>> > >>>> >>> "<root><node>node1</node><node>node2</node><node>node3</node></root>"; >>> > >>>> $(xml) returns null (I expected that but... had to try) >>> > >>> > >>>> 2009/6/18 Fábio Costa <[email protected]> >>> > >>> > >>>> Do you get any errors?Thanks for this report. >>> > >>> > >>>>> Fábio Miranda Costa >>> > >>>>> Engenheiro de Computação >>> > >>>>>http://meiocodigo.com >>> > >>> > >>>>> On Thu, Jun 18, 2009 at 8:58 AM, bluff <[email protected] >>> >wrote: >>> > >>> > >>>>>> Are the comments in the request reply. if so IE cannot handle >>> this and >>> > >>>>>> will always fail. >>> > >>>>>> Solution remove the comments from the request reply >>> > >>> > >>>>>> On Jun 17, 11:56 pm, Eneko Alonso <[email protected]> >>> wrote: >>> > >>>>>> > I sent an email a copule of weeks ago about an issue parsing >>> XML >>> > >>>>>> withg >>> > >>>>>> > Mootools on IE browsers, something that jQuery does fine, as >>> you can >>> > >>>>>> see on >>> > >>>>>> > the next example.Notice the ajax request is done in Mootools, >>> even >>> > >>>>>> when the >>> > >>>>>> > xml is parsed by jQuery. >>> > >>> > >>>>>> > On this project I have both Mootools and jQuery, so I'm fine, >>> but >>> > >>>>>> what if I >>> > >>>>>> > had only Mootools? >>> > >>> > >>>>>> > this.request = new Request({ >>> > >>>>>> > method: 'get', >>> > >>>>>> > url: this.gallery.photosFeed + '&' + >>> > >>>>>> Hash.toQueryString({start: >>> > >>>>>> > 0, end: 10}), >>> > >>> > >>>>>> > onSuccess: function(text, xml) { >>> > >>>>>> > if (!$defined(xml)) { >>> > >>>>>> > console.warn('Gallery XML is empty.') >>> > >>>>>> > return; >>> > >>>>>> > } >>> > >>> > >>>>>> > // *** MOOTOOLS CODE FAILS ON IE BROWSERS *** >>> > >>>>>> > // >>> xml.getElements('document').each(function(photo, >>> > >>>>>> index) { >>> > >>>>>> > // var pic = { >>> > >>>>>> > // docId: >>> > >>>>>> > photo.getElement('fileentryid').get('text'), >>> > >>>>>> > // userId: >>> > >>>>>> > photo.getElement('userid').get('text'), >>> > >>>>>> > // title: >>> > >>>>>> photo.getElement('title').get('text'), >>> > >>>>>> > // ownerName: >>> > >>>>>> > photo.getElement('userfullname').get('text'), >>> > >>>>>> > // rating: >>> > >>>>>> > photo.getElement('rating').get('text').toFloat(), >>> > >>>>>> > // created: new >>> > >>>>>> > Date(photo.getElement('createdate').get('text') * 1000), >>> > >>>>>> > // images: {} >>> > >>>>>> > // } >>> > >>>>>> > // >>> > >>>>>> photo.getElements('image').each(function(image) { >>> > >>>>>> > // pic.images[image.get('label')] = >>> > >>>>>> > image.getElement('url').get('text') >>> > >>>>>> > // }); >>> > >>>>>> > // var photoThumb = new PhotoThumb({data: >>> pic}); >>> > >>>>>> > // this.gallery.photos.push(photoThumb); >>> > >>>>>> > // >>> this.photosList.grab(photoThumb.element); >>> > >>>>>> > // }.bind(this)); >>> > >>> > >>>>>> > >>> jQuery(xml).find('document').each(function(index, >>> > >>>>>> photo) { >>> > >>>>>> > photo = jQuery(photo); >>> > >>>>>> > var pic = { >>> > >>>>>> > docId: >>> photo.find('fileentryid').text(), >>> > >>>>>> > userId: >>> photo.find('userid').text(), >>> > >>>>>> > title: photo.find('title').text(), >>> > >>>>>> > ownerName: >>> > >>>>>> photo.find('userfullname').text(), >>> > >>>>>> > rating: >>> > >>>>>> photo.find('rating').text().toFloat(), >>> > >>>>>> > created: new >>> > >>>>>> Date(photo.find('createdate').text() >>> > >>>>>> > * 1000), >>> > >>>>>> > images: {} >>> > >>>>>> > } >>> > >>>>>> > var images = photo.find('image'); >>> > >>>>>> > images.each(function() { >>> > >>>>>> > var image = jQuery(this); >>> > >>>>>> > pic.images[image.attr('label')] = >>> > >>>>>> > image.find('url').text(); >>> > >>>>>> > }); >>> > >>> > >>>>>> > // This code does not change from avobe >>> > >>>>>> > var photoThumb = new PhotoThumb({data: >>> pic}); >>> > >>>>>> > this.gallery.photos.push(photoThumb); >>> > >>>>>> > this.photosList.grab(photoThumb.element); >>> > >>>>>> > }.bind(this)); >>> > >>>>>> > }.bind(this), >>> > >>> > >>>>>> > onFailure: function() { >>> > >>>>>> > console.warn('Gallery feed could not be >>> loaded.'); >>> > >>>>>> > } >>> > >>>>>> > }); >>> > >>>>>> > this.request.send(); >>> >> >> >
