Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
dan hoef je ook niet helemaal de <html><head/><body> etc mee te geven, maar kan je gewoon de inhoud van je divje wat je wil updaten in html erheen poepen
Netjes via de DOM gaatje alleen maar meer problemen opleveren (xml, cdata, etc) , bloated code en qua performance wordt het er ook niet beter op
[ Voor 25% gewijzigd door SchizoDuckie op 02-09-2006 22:09 ]
Over eventuele problemen met XMLHTTPRequest en Internet Explorer: Onder IE is XMLHTTP een ActiveX object en de inhoud van deze objects zijn niet per definitie gemakkelijk in de HTML dom te plaatsen.
Wat ik zelf het meest doe is een callback d.m.v. een JavaScript eval van responseText of het aanmaken van nieuwe HTML objecten(elementen) nav van de inhoud van de overgestuurde XML.
omdat het xmlobject dat ik terug krijg van mijn httprequest niet echt compatible lijkt met de rest van de browser (ik weet niet waar het aan ligt), ga ik nu proberen om de responsetext om te zetten naar een xmlobject, zodat ik het met DOM kan benaderen en op de nette manier kan toevoegen aan mijn document.
ik zou graag willen weten wat jullie van deze oplossing vinden. en ik zou ook graag willen weten waarom mijn xmlobject dat direct uit mijn httprequest komt niet goed werkt (de manier die ik in mijn topic start beschreven heb).
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
1
2
3
| var code = HTTPRequest.responseXML.getElementsByTagName('div')[0]; var oBody = document.getElementsByTagName('body')[0]; oBody.appendChild( document.importNode(code, true) ); |
Voor IE zal je toch iets met de serialized versie moeten doen:
1
2
3
4
| var code = HTTPRequest.responseXML.getElementsByTagName('div')[0]; var code_serialized = code.xml; var oBody = document.getElementsByTagName('body')[0]; oBody.insertAdjacentHTML('beforeEnd', code_serialized); |
+ gratis titelfix
Overigens: je kan dus niet zomaar een element van het ene document in een ander document zetten, ook niet met cloneNode omdat het element dan nog steeds toebehoort aan het oorspronkelijke document. Daarom is er importNode. Het feit dat het wel lijkt te werken in Firefox is het gevolg van een bug.
[ Voor 23% gewijzigd door crisp op 02-09-2006 23:11 ]
Intentionally left blank
ik heb de versie voor standards-compliant browsers getest en die werkt. alleen snap ik nog niet waarom je niet meteen die div kan appenden, maar dat je die importNode functie nodig hebt.
*edit:
net te laat, je hebt het antwoord al gegeven.
idd het lijkt te werken in FF, maar in feite kun je er niks mee. de code wordt wel in het document gezet, maar is verder immuun voor elke vorm van css of opmaak.
de versie voor IE zal ik zo even testen, maar ik ga ervan uit dat die ook wel werkt. alleen vraag ik me dan nog af waarom je bij IE niet gewoon gebruik kan maken van het xmlobject net als bij standards-compliant browsers. want als je toch gebruik maakt van de geserialiseerde versie, kun je dan niet net zo goed de responseText ophalen ipv de responseXML?
[ Voor 16% gewijzigd door tombo_inc op 02-09-2006 23:14 ]
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Omdat dat element toebehoort aan het bron-document en niet aan het doel-document.Tombo_inc schreef op zaterdag 02 september 2006 @ 23:12:
harstikke bedankt!
ik heb de versie voor standards-compliant browsers getest en die werkt. alleen snap ik nog niet waarom je niet meteen die div kan appenden, maar dat je die importNode functie nodig hebt.
omdat het IE is en die nogal achterlopen mbt de implementatie van bepaalde webstandaardende versie voor IE zal ik zo even testen, maar ik ga ervan uit dat die ook wel werkt. alleen vraag ik me dan nog af waarom je bij IE niet gewoon gebruik kan maken van het xmlobject net als bij standards-compliant browsers.
ja en nee; het voordeel van de .xml property is natuurlijk dat je enkel een serialized string van je div-element kan opvragen ipv met stringfuncties in je responseText te moeten gaan spitten.want als je toch gebruik maakt van de geserialiseerde versie, kun je dan niet net zo goed de responseText ophalen ipv de responseXML?
werkt hier anders primaTombo_inc schreef op zaterdag 02 september 2006 @ 23:12:
*edit:
net te laat, je hebt het antwoord al gegeven.
idd het lijkt te werken in FF, maar in feite kun je er niks mee. de code wordt wel in het document gezet, maar is verder immuun voor elke vorm van css of opmaak.
[ Voor 14% gewijzigd door crisp op 02-09-2006 23:17 ]
Intentionally left blank
nee, dat bedoel ik niet. jouw oplossing werkt ook prima. ik bedoel dat die bug zo werkt. in FF kun je dus direct een element appenden, maar daarna kun je er niks meer mee.[...]
werkt hier anders prima
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Dat is deze bug; Firefox zou een WRONG_DOCUMENT_ERR exception moeten genereren. Nu krijg je inderdaad rare behaviors en het verkeerde idee dat het wel zo zou moeten werken.Tombo_inc schreef op zaterdag 02 september 2006 @ 23:27:
[...]
nee, dat bedoel ik niet. jouw oplossing werkt ook prima. ik bedoel dat die bug zo werkt. in FF kun je dus direct een element appenden, maar daarna kun je er niks meer mee.
[ Voor 10% gewijzigd door crisp op 02-09-2006 23:37 ]
Intentionally left blank
ik snap er geen snars meer van
dit is de code:
1
2
3
4
5
6
7
8
9
10
11
12
| //stuff aan pagina koppelen function appendit( sMarkup ) { oBody = document.getElementsByTagName('body')[0]; //oBody.appendChild( sMarkup ); oBody.appendChild( document.importNode(sMarkup, true) ); } //httprequest zooi; ajax is mijn eigen httprequestobject appendit( ajax.getRequestData( 'xml' ).getElementsByTagName('div')[0] ); |
ik hoop dat dit probleem opgelost kan worden, want ik vind het erg interessant.
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Iets meer code zou handig zijn, eveneens welke versie Firefox je gebruikt (hier Ff 1.5.0.6)Tombo_inc schreef op zondag 03 september 2006 @ 00:04:
dit is erg merkwaardig. ik ervaar nu (met jouw oplossing) namelijk hetzelfde alsof ik direct de node toevoeg aan mijn document. mijn parentdiv met subdivs worden nu toegevoegd aan mijn body, maar alle subdivs worden automatisch gefloat, en ik kan wederom geen enkele vorm van styles toepassen.
ik snap er geen snars meer van
dit is de code:
[...]
ik hoop dat dit probleem opgelost kan worden, want ik vind het erg interessant.
Ik had het volgende getest; een XHTML document (opgeslagen als XML anders snapte IE het niet ondanks correcte mimetype) met de volgende division:
1
2
3
| <div id="foo"> <b>tralala</b> </div> |
en verder deze code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| <style type="text/css"> #foo { background-color: yellow; } </style> <body> <script type="text/javascript"> if (!window.XMLHttpRequest) { window.XMLHttpRequest = function() { var types = [ 'Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP' ]; for (var i = 0; i < types.length; i++) { try { return new ActiveXObject(types[i]); } catch(e) {} } return undefined; } } var xml = new XMLHttpRequest(); xml.open('GET', 'http://localhost/bla.xml', false); xml.send(null); var code = xml.responseXML.getElementsByTagName('div')[0]; var oBody = document.getElementsByTagName('body')[0]; if (document.importNode) { oBody.appendChild( document.importNode(code, true) ); } else { var code_serialized = code.xml; oBody.insertAdjacentHTML('beforeEnd', code_serialized); } </script> </body> |
De style wordt netjes toegepast en de tekst is ook bold.
Intentionally left blank
ik heb vervolgens jouw voorbeeldcode precies gekopiert en getest, en die geeft ook nop. hij zet de tekst tralala linksboven in de hoek en that's it. IE doet het daarentegen goed. snap jij het nog, ik niet
edit:
mijn FF versie is ook 1.5.0.6
[ Voor 4% gewijzigd door tombo_inc op 03-09-2006 00:45 ]
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
1
2
3
4
5
6
7
8
9
10
11
12
| <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl"> <head> <title>Test</title> </head> <body> <div id="foo"> <b>tralala</b> </div> </body> </html> |
Intentionally left blank
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Jep, ik krijg de text 'tralala' in bold en met een gele achtergrond according de CSS.Tombo_inc schreef op zondag 03 september 2006 @ 14:12:
nope werkt net zo min. werkt het bij jou wel dan in FF? beetje raar, want we hebben dezelfde versie.
Intentionally left blank
ik heb hem even online gezet, met een screen van mijn result. misschien kun je daar iets mee.
http://www.v-studios.nl/testcase/
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Intentionally left blank
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Dit bestand bevat een DTD en definieerd een namespace wat het XHTML maakt, zonder dat is het gewoon puur XML en heeft een attribuut als 'id' geen enkele betekenis.
[ Voor 39% gewijzigd door crisp op 03-09-2006 16:08 ]
Intentionally left blank
je mag dus niet zomaar wat xhtml in een document proppen en dat document inlezen als xml. want dan krijg je gewoon xml en dat kun je niet via de "normale" manier opmaken. je moet dus in feite xhtml documenten maken met dtd en namespace verwijzing, en dan daaruit de content halen die je nodig hebt.
heb ik het nu goed? (het werkt in ieder geval wel
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition
Intentionally left blank
mooi dan ben ik weer wat wijzer en is dat probleem ook weer opgelostcrisp schreef op zondag 03 september 2006 @ 22:20:
Jep, dat is het idee.
ff voor de duidelijkheid (ja ik ben soms een mierenneuker). je bedoelt dat als je uit xml wilt importeren zonder dtd (die er xhtml van maakt) en normaal op wil kunnen maken, dat je dan moet serializeren en met innerHTML moet werken. en als je wel een dtd gebruikt dat je dan de oplossing toe kan passen waar ik zo lang naar gezocht heb (gewoon netjes via DOM).Als je vanuit XML wilt 'importeren' zal je ook moeten serializen en met innerHTML oid moeten werken.
Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition