Как обойти сломанный removeAttribute в IE / Edge? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь запомнить выбранный элемент элемента формы выбора или множественного выбора в блоке contenteditable.Для Firefox и Chrome я могу просто запомнить выбранные элементы, удалить атрибуты selected и отметить те, которые должны иметь его.Обычная сериализация DOM позаботится обо всем остальном.Попытка сделать это с IE или Edge терпит неудачу, потому что это просто не работает.Ниже приведен небольшой тестовый пример:

<!DOCTYPE html>
<html>
<body>
  <select multiple>
    <option id="op1" selected value="1">1</option>
  </select>
  <button onclick="var op1 = getElementById('op1'); op1.removeAttribute('selected'); alert(op1.outerHTML);">Test </button>
</body>
</html>

Есть ли у кого-нибудь метод, который работает без необходимости клонировать параметры, имеющие атрибут, и заменять им текущие узлы?Целью будет IE 8+ и Edge;старый IE не представляет интереса.

1 Ответ

0 голосов
/ 13 октября 2018

По предложению пользователя 3297291 найден дополнительный поиск Ошибка № 12087679 для Edge .Интеграция предложений из этого дает следующее, которое работает во всех IE11, Edge, Chrome и Firefox:

<!DOCTYPE html>
<html>
<body>
  <select multiple>
    <option id="op1" selected value="1">1</option>
  </select>
  <button onclick="var op1 = getElementById('op1');
                   op1.setAttribute('selected', false);
                   op1.selected = false;
                   op1.removeAttribute('selected');
                   alert(op1.outerHTML);">Test </button>
</body>
</html>

Сначала явно убедитесь, что атрибут является логическим значением, по умолчанию это не так (ошибка Edge).Затем отключите свойство, чтобы браузеры Microsoft также удаляли атрибут.Наконец, удалите атрибут для остального мира, который реализует уровень DOM 1.

...