Пользовательские атрибуты данных: http://dev.w3.org/html5/spec/Overview.html # embedding-custom-non-visible-data

Когда я говорю «работа» », Я имею в виду, если у меня есть такой HTML-код:

<div id="geoff" data-geoff="geoff de geoff">

будет ли следующий JavaScript:

var geoff = document.getElementById('geoff');
alert(geoff.dataGeoff);

создавать в IE 6 предупреждение с« geoff de geoff »в нем?

Вы можете получить значения пользовательских (или собственных) атрибутов, используя getAttribute. Следуя вашему примеру с

<div id="geoff" data-geoff="geoff de geoff">

, я могу получить значение data-geoffusing

var geoff = document.getElementById("geoff");
alert(geoff.getAttribute("data-geoff"));

, поэтому ваш код будет работать только после загрузки окна, когда все ресурсы имеют был загружен. В этот момент jQuery ( MSDN . И хотя там упоминается, что вам нужен IE7, чтобы заставить это работать, я протестировал это некоторое время назад с IE6, и он функционировал правильно (даже в режиме причуд).

, но это, конечно, не имеет ничего общего с атрибутами HTML5.

Да, они работают.

IE поддерживает getAttribute() из IE4, что jQuery использует внутренне для data() Глядя на вывод

data = elem.getAttribute( "data-"   key ); // Line 1606, jQuery.1.5.2.js

, так что вы можете использовать метод .data() jQuery или простой ванильный JavaScript:

Пример HTML

<div id="some-data" data-name="Tom"></div>

Javascript

var el = document.getElementById("some-data");
var name = el.getAttribute("data-name");
alert(name);

jQuery

var name = $("#some-data").data("name");

Не только IE6 не поддерживает функцию атрибутов данных HTML5, фактически фактически Я обнаружил, что текущий браузер поддерживает их! Единственным исключением на данный момент является Chrome.

Вы можете свободно использовать data-geoff="geoff de geoff" в качестве атрибута, но только Chrome текущих версий браузера предоставит вам свойство .dataGeoff.

: текстовая строка, используемая для ссылки на переменную (то есть имя переменной). все текущие браузеры — включая IE6 — могут ссылаться на неизвестные атрибуты, используя стандартный метод DOM .getAttribute(), поэтому .getAttribute("data-geoff") будет работать везде.

В самом ближайшем будущем новые версии Firefox и Safari начнут поддерживать атрибуты данных, но, учитывая, что существует совершенно хороший способ доступа к ним, который работает во всех браузерах, тогда нет никакой причины использовать HTML5. метод, который будет работать только для некоторых ваших посетителей.

Вы можете узнать больше о текущем состоянии поддержки этой функции на CanIUse.com Глядя на вывод

Есть несколько примеров для

Я думаю, что IE всегда поддерживал это (по крайней мере, начиная с IE4), и вы можете получить к ним доступ из JS. Они были названы «свойства экспандо». См. Старую статью MSDN

Это поведение можно отключить, установив для параметра expando property значение false в элементе DOM (по умолчанию оно имеет значение true, поэтому расширение по умолчанию properties работает по умолчанию).

Редактировать: исправил URL

Если вы хотите получить все пользовательские атрибуты данных одновременно, например, свойство набора данных в новых браузерах, вы можете сделать следующее. Это то, что я сделал, и отлично работает для меня в ie7.

function getDataSet(node) {
    var dataset = {};
    var attrs = node.attributes;
    for (var i = 0; i < attrs.length; i  ) {
        var attr = attrs.item(i);
        // make sure it is a data attribute
        if(attr.nodeName.match(new RegExp(/^data-/))) {
            // remove the 'data-' from the string 
            dataset[attr.nodeName.replace(new RegExp('^data-'), '')] = attr.nodeValue;
        }
    }
    return dataset;
}

закрытии JavaScript внутри циклов — простой практический пример — переполнение стека IE6 , он может не работать. Для справки: MSDN

Я предлагаю использовать jQuery для обработки большинства случаев:

var geoff = $("#geoff").data("data-geoff");
alert(geoff);

, попробуйте это в своем коде.