Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   Аналог document.all (https://javascript.ru/forum/css-html-firefox-mizilla/32876-analog-document-all.html)

Sveta 02.11.2012 11:41

Аналог document.all
 
Добрый день!)
Столкнулась с проблемой:
если использовать
if (document.all) {}

то данный код работает только в IE.
Нашла такой код:
if (!document.all) {  //для работы в других браузерах
    document.constructor.prototype.__defineGetter__('all', function() { return document.getElementsByTagName('*'); } );  
    }

Данный код помог для браузера Opera
Но для FireFox он почему-то не работает...Как быть? Мне нужно чтобы и в IE и в Opera и в FireFox работало...Особенно FireFox!

devote 02.11.2012 11:54

if ( !document.all ) {
    if ( Object.defineProperty ) {
        Object.defineProperty( document, "all", {
            get: function() {
                return document.getElementsByTagName('*');
            }
        });
    } else if ( Object.prototype.__defineGetter__ ) {
        Object.prototype.__defineGetter__.call( document, 'all', function() {
            return document.getElementsByTagName('*');
        });
    } else {
        document.all = document.getElementsByTagName('*');
    }
}

Sveta 02.11.2012 12:03

Ваш код работает так же как и мой...но, скорее всего, это моя ошибка.
Я заметила, что если написать так
if (document.getElementsByTagName('*')) {alert(document.getElementsByTagName('*'));}

то FireFox возвращает [object HTMLCollection] то есть, на сколько я понимаю, то все работае..
и значит проблема в коде кот. содержится внутри?
if (document.getElementsByTagName('*')) {//IE
alert(document.getElementsByTagName('*'));
  if (event.srcElement.tagName == 'IMG' && event.srcElement.name=='mapimage'){

      pixelX = event.offsetX + originalLeft;
      pixelY = event.offsetY + originalTop;
      over(event.offsetX,event.offsetY);
        
     
      if ( flgfencing ) {
      drawFence (x1,y1,pixelX , pixelY );
      }
									     }
		   else
		   return false;
}

может я чего использую чего в FF нету?

Dim@ 02.11.2012 13:42

Sveta,
srcElement только в IE, Opera, а в хроме и мозилле это target:
var target = event.srcElement || event.target;
if (target.tagName == 'IMG' && target.name=='mapimage'){
.....

Sveta 06.11.2012 09:31

Dim@,
Спасибо)) только чтобы заработало я еще чуть код подправила:
evt = (evt) ? evt : ((window.event) ? window.event : null);
		if(evt) {
		 var target = (evt.target) ? evt.target : event.srcElement;
if (target.tagName == 'IMG' && target.name=='mapimage')
		
		   {
			alert('sdf');
			  pixelX = event.offsetX + originalLeft;
			  pixelY = event.offsetY + originalTop;
			  over(event.offsetX,event.offsetY);
				
			 
			  if ( flgfencing ) {
			  drawFence (x1,y1,pixelX , pixelY );
					}
			}
}

В итоге alert('sdf'); вызывается во всех браузерах..но в FF дальнейший код не работает...неужели еще что-то использую, что FF не поддерживает? сижу разбираюсь...

Sveta 06.11.2012 10:42

Чтож, все разрешилось.
Рабочий код выглядит так:
if (document.all){ //IE
		  if (event.srcElement.tagName == 'IMG' && event.srcElement.name=='mapimage')
		   {
			  pixelX = event.offsetX + originalLeft;
			  pixelY = event.offsetY + originalTop;
			  over(event.offsetX,event.offsetY);
				
			 
			  if ( flgfencing ) {
			  drawFence (x1,y1,pixelX , pixelY );
			  }
			}
		
	else
	return false;
	}

//=========================================================
	else if (document.getElementById) { //for FF and Opera
		if (evt.target.tagName =='IMG'&& evt.target.name == 'mapimage') {
			pixelX = evt.pageX - originalLeft; 
			pixelY = evt.pageY - originalTop;
			over(evt.pageX,evt.pageY);
			if ( flgfencing ){
			drawFence (x1,y1, evt.pageX , evt.pageY );
			}
		}
		else return false;
	}

Может кому пригодится!:thanks:


Часовой пояс GMT +3, время: 14:27.