IE8: тег option получает атрибут «selected» по умолчанию (и cloneNode все испортил) - PullRequest
3 голосов
/ 01 сентября 2009

IE, кажется, автоматически добавляет «выбранный» атрибут в тег опции.
Но потом, если вы клонируете это, все становится странно.

Если вы откроете страницу в IE8 с кодом ниже:

<html>
<body>
  <form><select><option>o1</option></select></form>
  <script>

      // without clone node
      var elm = document.getElementsByTagName('form')[0];
      alert(elm.innerHTML);

      // using the form as the root to clone
      elm = document.getElementsByTagName('form')[0].cloneNode(true);
      alert(elm.innerHTML);

      // using the select as the root to clone
      elm = document.getElementsByTagName('select')[0].cloneNode(true)
      alert(elm.innerHTML);

  </script>
</body>
</html>

Вы получите:

1-е предупреждение с убогим атрибутом «выбранный» на теге опции
Второе предупреждение без атрибута в теге параметра (это нормально, как и в любом другом браузере!)
3-е предупреждение, с «выбранным» появляется снова

Есть идеи, почему появляется этот атрибут?
И почему cloneNode, кажется, случайно удаляет его или нет?

Примечание. Вы можете подумать, почему у этого бедняка проблемы с этим?
Причина в том, что я являюсь участником библиотеки шаблонов JS PURE
И мне трудно найти чистое решение этой проблемы: - \

1 Ответ

0 голосов
/ 01 сентября 2009

Причина добавления выбранного атрибута состоит в том, что он является первым элементом option в элементе select. Если это так, и никакой другой элемент option уже не помечен как выбранный, IE сделает первый выбранный элемент option. Когда вы клонируете узел, как вы делали, не помещая его в DOM, он не может быть выбран. Если вы хотите получить согласованные результаты, просто установите выбранный атрибут вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...