Почему getElementById в области карты изображения не возвращает элемент области в IE?

У меня есть карта изображений на веб-странице со следующим HTML:

<div class="container">
    <img src="image.png" usemap="#hotspots">
    <map name="#hotspots">
        <area id="seg-1" href="" shape="poly" coords="167,286,113,379,320,379,266,286,167,286"/>
        <area... />
        <area... />
        <area... />
        ...
    </map>
</div>

И я пытаюсь получить ссылку на элемент области со следующим JavaScript:

var seg1 = document.getElementById("seg-1");

Я успешно получаю ссылку в:

  • Сафари 6 (ОС Х)
  • Хром 26 (ОС Х)
  • Файрфокс 21 (ОС Х)
  • Хром 27 (ХР)
  • Хром 27 (W7)
  • Хром (W8).

Но не в:

  • IE8 (XP)
  • IE9 (W7)
  • IE10 (W8)
  • Файрфокс 17 (ХР)
  • Фаерфокс 21 (W7)
  • Фаерфокс 21 (W8).

Когда это работает, я получаю ссылку на элемент области HTML, но когда это не работает, я получаю ссылку на документ. Вот сообщения журнала консоли:

Работающий:

HTMLAreaElement

Не работает:

http://localhost/index.html

Я знаю, как это обойти, но я пытаюсь понять, почему это происходит? Почему getElementById не работает для элементов области карты изображения?

Спасибо за любые ваши мысли.


person Stimpson    schedule 29.05.2013    source источник


Ответы (1)


Кажется, это просто связано с методом «toString» для элемента области в этих браузерах. По какой-то причине он печатает производное значение href. Однако это только то, что печатается. Фактический результат getElementById по-прежнему является элементом области.

Например, если вы используете console.log(document.getElementById('seg-1').shape) в этих браузерах, он по-прежнему будет правильно печатать «поли».

person Explosion Pills    schedule 29.05.2013
comment
Спасибо за это. Это очень интригующее поведение. - person Stimpson; 30.05.2013