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:
  1. <html>  
  2. <body>  
  3. <div id="a">Ez egy teszt</div>  
  4.   
  5. <script type="text/javascript">  
  6. Object.prototype.getX = function() {  
  7.   obj  = this;  
  8.   left = 0;  
  9.   if (obj.offsetParent) {  
  10.       do {  
  11.       left += obj.offsetLeft;  
  12.       } while (objobj = obj.offsetParent);  
  13.   }  
  14.   
  15.   return left;  
  16. }  
  17.   
  18. document.write(document.getElementById('a').getX()+'px');  
  19. </script>  
  20. </body>  
  21. </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 ...
  1. (function($) {  
  2.   $.fn.getElement = function() {  
  3.     return document.getElementById(this.attr('id'));  
  4.   };  
  5.   
  6.   $.fn.getX = function() {  
  7.     var obj  = this.getElement();  
  8.     var left = 0;  
  9.     if (obj.offsetParent) {  
  10.       do {  
  11.           left += obj.offsetLeft;  
  12.       } while (objobj = obj.offsetParent);  
  13.     }  
  14.   
  15.     return left;  
  16.   };  
  17. })(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!