HTML5 自定义数据属性在 IE 6 中“有效”吗?

IT技术 javascript internet-explorer html internet-explorer-6 custom-data-attribute
2021-01-12 00:59:29

自定义数据属性: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”的警报?

6个回答

您可以使用 检索自定义(或您自己的)属性的值getAttribute按照你的例子

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

我可以获得data-geoff使用的value

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

请参阅MSDN虽然那里提到你需要 IE7 才能让它工作,但我不久前用 IE6 测试过它并且它运行正常(即使在怪癖模式下)。

但这当然与特定于 HTML5 的属性无关。

我真的很惊讶这个答案仍然得到如此多的赞誉,尤其是根据许多 Web 开发人员的说法,IE 6 应该被认为是“死的”。
2021-03-13 00:59:29
总的来说,这并不是对 HTML5 数据属性的实际支持。听起来确实是一种利用它们的方式。
2021-03-17 00:59:29
@Marcel:我认为很多网站仍然将 IE 6 作为其受众中不可忽视的一部分。也许再过10年,我们就不用再担心了。
2021-03-23 00:59:29
“如果您非常喜欢制作缺失的系列,您可能还可以修改浏览器。” — 是的,这就是 JavaScript 与 CSS 相比的优点:因为它是一种编程语言,您可以自己解决兼容性问题。
2021-04-01 00:59:29
更正这不支持将事物放入集合中的数据 API 或其他任何东西(没有人支持这个是的)。但是,如 get/Set Attribute 所示,您可以在任何最低限度的 DOM 感知浏览器中立即获得数据属性的主要用途。如果您非常倾向于制作丢失的集合,您可能也可以修改浏览器。从我最近的书籍实验中可以清楚地看出,数据属性现在可用,并且远远优于当前重载类属性值以包含样式信息和随机元数据的常见方案。
2021-04-04 00:59:29

是的,他们工作。

IE 已经getAttribute()从 IE4开始支持,这是 jQuery 在内部用于data().

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

所以你既可以使用 jQuery 的.data()方法,也可以使用普通的 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");
@RoyiNamir 我相信它应该适用于任何属性,但您最好检查一下。我在任何地方都没有 IE6。
2021-03-12 00:59:29
@Marko 怎么样<div lala="Tom"></div>,这在 IE6 中可以吗?你会如何读取值?
2021-03-24 00:59:29
我希望 jquery 会消失
2021-03-28 00:59:29
@Snekse 我相信这与底部的注释有关 Note: All browsers can already use data-* attributes and access them using getAttribute. "Supported" refers to accessing the values using the dataset property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.
2021-04-02 00:59:29
这个答案似乎与 canIuse 有点冲突。关于为什么将其标记为“部分”支持的任何输入?caniuse.com/dataset
2021-04-09 00:59:29

不仅 IE6 不支持 HTML5 数据属性功能,事实上当前几乎没有浏览器支持它们!目前唯一的例外是 Chrome。

您完全可以自由地将其data-geoff="geoff de geoff"用作属性,但只有当前浏览器版本的 Chrome 才会为您提供该.dataGeoff属性。

幸运的是,所有当前的浏览器(包括 IE6)都可以使用标准 DOM.getAttribute()方法引用未知属性,因此.getAttribute("data-geoff")可以在任何地方使用。

在不久的将来,新版本的 Firefox 和 Safari 将开始支持 data 属性,但鉴于有一种完美的访问方式,适用于所有浏览器,那么真的没有理由使用 HTML5 方法仅适用于您的某些访问者。

您可以在CanIUse.com 上查看有关此功能的当前支持状态的更多信息

希望有帮助。

“不仅 IE6 不支持 HTML5 数据属性功能,事实上当前几乎没有浏览器支持它们”——当然,尽管这取决于你对“支持”的定义。没有浏览器支持该dataset属性,但所有浏览器都允许您将数据存储在前缀为 的属性中data-,并且(如您所说)通过getAttribute. 因此,从某种意义上说,它们支持该功能,因为您可以有效地使用属性本身。
2021-03-17 00:59:29
我明白你的观点,即没有理由使用该dataset属性来访问它们 - 我不知道它应该提供什么好处getAttribute
2021-03-20 00:59:29
@Paul——与 getAttribute 相比,它没有任何优势。它提供的是一种标准化的方式来处理使用属性针对标签存储数据。这一直有效,但直到 HTML5 才成为官方标准。HTML5 只是简单地采用了现有的非标准但广泛使用的功能并批准了它,添加了一些规则来说明您应该如何命名它们,并定义一种新的访问方式。当我说它不受支持时,我明确指的是.dataXYZ属性;正如您所说,基本功能得到广泛支持,但不是因为它是 HTML5。
2021-03-20 00:59:29

我认为 IE 一直支持这个(至少从 IE4 开始)并且您可以从 JS 访问它们。它们被称为“扩展属性”。请参阅旧的 MSDN 文章

可以通过在 DOM 元素上将expando属性设置为 false来禁用此行为(默认情况下为 true,因此 expando属性默认工作)。

编辑:修复了 URL

getAttribute 跨浏览器工作,这里不需要依赖 IE 怪癖。
2021-03-14 00:59:29
啊,是的,抱歉,我认为这不是我想要的。刚刚编辑了问题以澄清。
2021-04-01 00:59:29
非常好,谢谢。这篇文章也不错,一定要喜欢“欢迎来到第一个 DHTML Dude 专栏”。
2021-04-06 00:59:29
我是那个抱歉的人,链接错误。它解释了如何禁用此行为,而不是解释该功能。我已经修复了链接和文本。
2021-04-09 00:59:29

如果您想在较新的浏览器中像数据集属性一样一次性检索所有自定义数据属性,您可以执行以下操作。这就是我在 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;
}