ugrás a tartalomhoz

Object.prototype probléma IE alatt

fchris82 · 2008. Aug. 23. (Szo), 16.03
Szeretném, ha obj.getX() formában le tudnám kérdezni a html elemek pozícióit. Az én gondolatomban ez nagyon egyszerű, íme a pár soros forrás teszteléshez:

<html>
<body>
<div id="a">Ez egy teszt</div>

<script type="text/javascript">
Object.prototype.getX = function() {
  obj  = this;
  left = 0;
  if (obj.offsetParent) {
	  do {
  	  left += obj.offsetLeft;
	  } while (obj = obj.offsetParent);
  }

  return left;
}

document.write(document.getElementById('a').getX()+'px');
</script>
</body>
</html>
Ez mindenhol működik, de IE-ben hibát ad, mondván "Az objektum nem támogatja ezt a tulajdonságot vagy metódust". A kérdésem egyrészt, hogy most én csináltam vmi hülyeséget, vagy IE bug? Hogyan tudnám célomat elérni?

Itt rögtön tesztelheted is: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_splice . Könnyebb másolhatóság érdekében szinezés nélkül is bemásolom:
<html>
<body>
<div id="a">Ez egy teszt</div>

<script type="text/javascript">
Object.prototype.getX = function() {
obj = this;
left = 0;
if (obj.offsetParent) {
do {
left += obj.offsetLeft;
} while (obj = obj.offsetParent);
}

return left;
}

document.write(document.getElementById('a').getX()+'px');
</script>
</body>
</html>
 
1

HTMLElement ie

toxin · 2008. Aug. 23. (Szo), 16.32
-re keress rá gugliban, ill. a safari-ie htc : Crossbrowser HTMLElement Prototyping

üdv Csaba

ui: ill prototype.js-ben 'Element.extend = (function() {' -re
3

Aha, persze :P

fchris82 · 2008. Aug. 24. (V), 13.48
Ez a htc-s megoldás nem volt szimpatikus, úgyhogy jQuery-nek csináltam egy kiegészítést, és azt használom inkább, majdnem ugyanaz az alak, ami nekem kell ...

(function($) {
  $.fn.getElement = function() {
    return document.getElementById(this.attr('id'));
  };

  $.fn.getX = function() {
    var obj  = this.getElement();
    var left = 0;
    if (obj.offsetParent) {
  	  do {
    	  left += obj.offsetLeft;
  	  } while (obj = obj.offsetParent);
    }

    return left;
  };
})(jQuery);
Nekem így praktikusabb, mint htc-ket létrehozni, meg írogatni még jó néhány "felesleges" dolgot, csak hogy IE alatt is működjön.

Ui: A 12. sorban a program duplázta meg az 'obj'-et, én 1-et írtam oda. Természetesen helyesen: while(obj = obj.offsetParent);
4

re :P hamár jQuery

toxin · 2008. Aug. 24. (V), 15.31
fenti htc ajánlása: John Resig : Pro JavaScript™ Techniques Copyright © 2006 c. könyvében van

:)))

üdv Csaba
2

verboten

wiktor · 2008. Aug. 23. (Szo), 17.32
Az Object.prototype extendelésével vigyázni kell, mert nagyon oda kell figyelni a használata során.

Lásd: http://erik.eae.net/archives/2005/06/06/22.13.54/
5

Nem tudom, hogy pontosan mi is a fontos..

Velias9 · 2008. Szep. 3. (Sze), 14.36
..., mert ha az a cél, hogy a kódod működjön, akkor ez már (ha jól láttam) pipa.

Azonban, ha a vél az érték visszakapása (ez esetben a pozíció), akkor ezt ajánlom: jQuery Dimensions Plugin 1.1.

Minden jót!