Element.dataset в Internet Explorer

Мне нужен способ перечислить атрибуты data-* элемента. Я бы использовал Object.keys(element.dataset) но IE 9.0 не имеет поддержки dataset . Как я должен делать это таким образом, который работает для IE 9.0 (и Chrome, Firefox, Safari)?

  • Что означает эта ошибка? Uncaught TypeError: Уже прочитал?
  • Управление кнопкой назад
  • Как вы разбиваете массив на пары массивов в JavaScript?
  • Является ли Unhooking обработчиками событий, чтобы избежать утечек памяти в IE
  • Формат даты FullCalendar
  • История Javascript.PushState не работает?
  • Получить непосредственный первый дочерний элемент
  • Получить элемент html, в котором произошел щелчок мыши?
  • Использование querySelectorAll для извлечения прямых детей
  • Swap 2 html элементов и сохранить прослушиватели событий на них
  • Обнаружение, когда iframe получает или теряет фокус
  • Консоль показывает ошибку в политике безопасности контента и множестве неудачных запросов GET
  • 3 Solutions collect form web for “Element.dataset в Internet Explorer”

    element.attributes даст вам NamedNodeList со всеми атрибутами элемента.
    Просто проверьте имена атрибутов, если они начинаются с data-

     var attributes = element.attributes, i = attributes.length; for (; i--; ){ if (/^data-.*/.test(attributes[i].name)) { console.log(attributes[i].name); } } 

    пример

    Если вы используете jQuery, вы можете получить доступ к атрибутам data- * через метод $ .data (): http://api.jquery.com/data/

    Я нуждался в этом, но также нуждался в доступе к ключам, поэтому я написал функцию, основанную на решении, данное Андреасом:

     Element.prototype.dataset_simulated = function(){ var attributes = this.attributes; var simulatedDataset = {}; for (var i = attributes.length; i--; ){ if (/^data-.*/.test(attributes[i].name)) { var key = attributes[i].name.replace('data-', ''); var value = this.getAttribute(attributes[i].name); simulatedDataset[key] = value; } } return simulatedDataset; }; 

    И чтобы использовать его, вместо выполнения element.dataset вы делаете element.dataset_simulated() .

    И вот скрипка

    Редактировать:

    Похоже, что IE <8 также не поддерживает Element.prototype , поэтому это может быть просто функцией с использованием типа dataset_simulated(elem) :

     function dataset_simulated(elem){ var attributes = elem.attributes; var simulatedDataset = {}; for (var i = attributes.length; i--; ){ if (/^data-.*/.test(attributes[i].name)) { var key = attributes[i].name.replace('data-', ''); var value = elem.getAttribute(attributes[i].name); simulatedDataset[key] = value; } } return simulatedDataset; }; 
    JavaScript делает сайт умным, красочным и простым использованием.