[js/dom] Functie aan element hangen ..

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
this.element        = document.createElement('div');
    
with (this.element)
{
    innerHTML   = '[img]"'[/img]'
        + objNode.getAttribute('txt') + ' - <a href="javascript: //" onClick\
        ="this.parentElement.parentTagName();">blaaat</a>';

    parentTagName = function()
    { alert(this.parentElement.tagName.toLowerCase()); }
}

Volgens mij is dit niet zo'n ingewikkeld stukje JS (, behalve dat ik nogal zit te stoeien met of het nou parentElement of parentNode moet zijn). De bedoeling is dat ik de functie parentTagName() aan een DIVje hang en dat ik deze vanuit een linkje in de DIV aan kan roepen.. het leek me dat het op de bovenstaande manier wel zou lukken, maar dat gaat dus niet :| Ik heb al van alles geprobeerd maar 't lijkt niet te werken..

misschien iemand die mij uit kan leggen wat ik fout heb gedaan ?

[ Voor 12% gewijzigd door r0bert op 03-01-2003 20:52 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:27

crisp

Devver

Pixelated

parentTagName is niet een standaard property van het element dat je zojuist aanmaakt, je kan het in een with-constructie dan ook niet zomaar toewijzen; je zal expliciet:
JavaScript:
1
2
this.element.parentTagName = function()
  { alert(this.parentElement.tagName.toLowerCase()); }

moeten doen (buiten de with constructie). (Getest en werkt :) )

[ Voor 8% gewijzigd door crisp op 04-01-2003 00:13 ]

Intentionally left blank


Verwijderd

Doe het gewoon niet met innerHTML, want dat staat wat mij betreft echt lijnrecht tegenover goed DOM scripten. Hoe dan wel? Nou, met javascript kun je gebruik maken van functie referenties. Grappig trouwens, delen van je code lijken op iets wat ik ooit geproduceerd heb :)

Doe dit maar eens:

this.element.onclick = parentTagName;

Verder kun je de functie parentTagName gewoon definieren, dus:

function parentTagName () {
...
}

De scope blijft bewaard, en het gebruik van this binnen die functie zal dus slaan of het object waar je op klikt. Erg handig in veel gevallen.

[ Voor 4% gewijzigd door Verwijderd op 04-01-2003 00:22 ]


  • [eNeRGy]
  • Registratie: November 1999
  • Laatst online: 24-04-2025
Erg handig Cheatah, gebruikt het alleen niet te vaak als je met IE werkt!

Onze applicatie op het werk bestond vooral uit 15 DOM/JS objecten die ik geschreven had, als je ons programma een uurtje gebruikte in IE dan was 300mb geheugen gebruik geen uitzondering :(

Dankzij Erik van WebFX (webfx.eae.net) ben ik erachter gekomen dat elke koppeling tussen JS en DOM niet opgeruimd wordt door de garbage collector |:(

Hierna konden we al onze code herschrijven.

Probleem aangekaart bij Microsoft, 2 weken heen-en-weer gemaild, resultaat: MS geeft toe dat het probleem er is, maar dat het pas 8x gemeld is en de code te complex om te fixen. (Probleem aankaarten kostte €260,-). Verder blijkt het niet alleen bij JS en DOM voor te komen, maar bij elke koppeling met een 'externe wereld' (DOM, Behaviours, ActiveX, etc).

Hmm, ff frustraties van de afgelopen 2 maanden eruit getypt :)

Edit:

Dingen die dus fout gaan:

- JS Funtion object aan events hangen

oDom.onfocus = JSFunction;

- JS Array, Object, Function aan DOM elementen hangen

oDom.values = [1, 2, 3];
oDom.object = {'a': 1, 'b': 1}
oDom.action = JSFunction

- Anonymous functions aan DOM element attachen (attachEvent)

oDom.attachEvent('onclick', function(event) { alert(); });

(deze kan niet meer gedettached worden)

- DOM element aan JS variabele toewijzen

var oDom = document.createElement('dom');

(oplossing: zet, zo gauw je de variabele niet meer nodig hebt 'oDom = null' in de code, voor 'return oDom' is er geen workaround)

En zo zijn er nog veel meer voorbeelden die ik kan geven, ik weet ondertussen ook veel workarrounds, bij interesse kan ik hier wel iets uitgebreider over schrijven.

[ Voor 32% gewijzigd door [eNeRGy] op 04-01-2003 02:15 ]


  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 21-08 10:46
[eNeRGy] schreef op 04 januari 2003 @ 02:07:
En zo zijn er nog veel meer voorbeelden die ik kan geven, ik weet ondertussen ook veel workarrounds, bij interesse kan ik hier wel iets uitgebreider over schrijven.


Gerne, altijd intressant :). En scheelt mij wellicht in de toekomst weer hoop gezeik/irritatie/nutteloos gekut :P. Leuk dat je btw nu wat vaker in W&G langskomt ;).

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 09:46

Pelle

🚴‍♂️

Het viel mij ook op dat IE niet echt doet aan het opruimen van het geheugen dat aan DOM objecten is toegeschreven. Het duurt ook steeds langer voor hij bepaalde taken uit kan voeren. Heb een keer een testje gedaan met het aanmaken van 1000 layers. De eerste keer deed 'ie dat in 4 secs, de tweede keer in 8, de derde keer in 15, enz.
Echt heel vervelend, en er is niks dat je er tegen kunt doen :/

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Hmz. idd als je je taskmanager erbij houdt kan je het gehegengebruik per refresh zien toenemen :D dom! Heb hier een vrij simpel scriptje dat helemaal VOL zit met die dingen die dus blijkbaar "niet kunnen", en dat neemt per refresh met een halve MB toe.

[edit]
Halve mb is wel veel.
voorbeeld

[ Voor 21% gewijzigd door Clay op 04-01-2003 12:59 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:27

crisp

Devver

Pixelated

Clay schreef op 04 januari 2003 @ 12:46:
Hmz. idd als je je taskmanager erbij houdt kan je het gehegengebruik per refresh zien toenemen :D dom! Heb hier een vrij simpel scriptje dat helemaal VOL zit met die dingen die dus blijkbaar "niet kunnen", en dat neemt per refresh met een halve MB toe.

[edit]
Halve mb is wel veel.
voorbeeld
Schrale troost: Mozilla heeft er ook last van

Intentionally left blank


  • mpegernie
  • Registratie: November 2000
  • Laatst online: 12-03-2016

mpegernie

.mpe

crisp
Schrale troost: Mozilla heeft er ook last van
hier niet?
edit: winXP pro met Mozilla 1.3a. ik kan het hier beschreven effect alleen reproduceren in IE, mozilla heeft totaal geen last ervan.

edit2: IE ruimt idd weer netjes op bij een minimize... |:(

[ Voor 57% gewijzigd door mpegernie op 04-01-2003 13:51 ]

"The Major advances in civilization are processes that all but wreck the societies in which they occur." -A. N. Whitehead


Verwijderd

hier ook niet (Phoenix) blijft rond de 25 Mb hangen, hmmm als je IE minimaliseert en daarna weer maximaliseert word het geheugen weer vrij gegeven.

[ Voor 49% gewijzigd door Verwijderd op 04-01-2003 13:46 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 10:27

crisp

Devver

Pixelated

mpegernie schreef op 04 januari 2003 @ 13:36:
[...]
hier niet?
edit: winXP pro met Mozilla 1.3a. ik kan het hier beschreven effect alleen reproduceren in IE, mozilla heeft totaal geen last ervan.
Misschien dit voorbeeld niet, ik bedoelde het meer algemeen als je bijvoorbeeld in een document dynamisch objecten aanmaakt en vervolgens weer verwijderd (zonder refresh dus).

Intentionally left blank


  • mpegernie
  • Registratie: November 2000
  • Laatst online: 12-03-2016

mpegernie

.mpe

jammer, tzou weer een reden zijn om IE te bannen :D

"The Major advances in civilization are processes that all but wreck the societies in which they occur." -A. N. Whitehead


  • [eNeRGy]
  • Registratie: November 1999
  • Laatst online: 24-04-2025
oh, mijn simpele voorbeeld van het geheugen lek dat ik ook aan Microsoft heb gegeven: http://www.hompus.nl/zooi/memleak.html als je de pagina inleest gebeurt er nog niet zo heel veel, maar refresh eens met je taskmanager open, je zal zien dat het geheugen gigantisch oploopt.

quote uit een mailtje naar MS:
1. Open the memleak.html, IE uses 27,7 MB Memory and 18,4 MB Virtual Memory
2. Press F5, IE Uses 39,5 MB Memory and 30,1 MB Virtual Memory
3. Press F5, IE Uses 51,3 MB Memory and 41,9 MB Virtual Memory
4. Go to 'about:blank', IE still uses 50,6 Memory and 41,3 MB Virtual Memory
McVirusS schreef op 04 januari 2003 @ 03:08:

Gerne, altijd intressant :). En scheelt mij wellicht in de toekomst weer hoop gezeik/irritatie/nutteloos gekut :P. Leuk dat je btw nu wat vaker in W&G langskomt ;).
Ik zal eens kijken wat ik erover kan schrijven :)
En idd, ik heb echt twee maanden amper tijd gehad om hier te lezen, ik hoop dat nu weer wat vaker te kunnen doen :)

  • edie
  • Registratie: Februari 2002
  • Laatst online: 10:34
Misschien dat je iets kunt doen met prototyping?

als in:
code:
1
2
3
4
div.prototype.parentTagName = function()
{
  //rest van de functie
}


En iedere keer dat je dan een div element maakt (met createElement) komt die functie er vanzelf bij aan. (tenminste... in mijn klein theorietje dan ;))

Hoe het verder zit met opruimen, geheugengebruik enzo, dat weet ik niet.

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert

Pagina: 1