HTML5 自定义数据属性“起作用”吗?在 IE 6 中?

发布于 2024-08-24 11:54:57 字数 480 浏览 9 评论 0原文

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

Custom data attributes: http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data

When I say “work”, I mean, if I’ve got HTML like this:

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

will the following JavaScript:

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

produce, in IE 6, an alert with “geoff de geoff” in it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

深海里的那抹蓝 2024-08-31 11:54:57

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

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

data-geoff 的值

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

我可以使用See MSDN。尽管那里提到您需要 IE7 才能使其正常工作,但我不久前使用 IE6 对其进行了测试,它运行正常(即使在怪异模式下)。

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

You can retrieve values of custom (or your own) attributes using getAttribute. Following your example with

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

I can get the value of data-geoff using

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

See MSDN. And although it is mentioned there that you need IE7 to get this to work, I tested this a while ago with IE6 and it functioned correctly (even in quirks mode).

But this has nothing to do with HTML5-specific attributes, of course.

时光礼记 2024-08-31 11:54:57

是的,它们可以工作。

IE 从 IE4 开始就支持 getAttribute(),这也是 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");

Yes, they work.

IE has supported getAttribute() from IE4 which is what jQuery uses internally for data().

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

So you can either use jQuery's .data() method or plain vanilla JavaScript:

Sample 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");
全部不再 2024-08-31 11:54:57

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

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

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

在不久的将来,新版本的 Firefox 和 Safari 将开始支持数据属性,但考虑到有一种在所有浏览器中都适用的完美的访问数据属性的方法,那么确实没有理由使用 HTML5 方法仅适用于部分访客。

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

希望有帮助。

Not only does IE6 not support the HTML5 Data Attribute feature, in fact virtually no current browser supports them! The only exception at the moment is Chrome.

You are perfectly at liberty to use data-geoff="geoff de geoff" as an attribute, but only Chrome of the current browser versions will give you the .dataGeoff property.

Fortunately, all current browsers - including IE6 - can reference unknown attributes using the standard DOM .getAttribute() method, so .getAttribute("data-geoff") will work everywhere.

In the very near future, new versions of Firefox and Safari will start to support the data attributes, but given that there's a perfectly good way of accessessing it that works in all browsers, then there's really no reason to be using the HTML5 method that will only work for some of your visitors.

You can see more about the current state of support for this feature at CanIUse.com.

Hope that helps.

暖风昔人 2024-08-31 11:54:57

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

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

编辑:修复了 URL

I think IE has always supported this (at least starting from IE4) and you can access them from JS. They were called 'expando properties'. See old MSDN article

This behaviour can be disabled by setting the expando property to false on a DOM element (it's true by default, so the expando properties work by default).

Edit: fixed the URL

能怎样 2024-08-31 11:54:57

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

If you wanted to retrieve all of the custom data attributes at once like the dataset property in newer browsers, you could do the following. This is what I did and works great for me in 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;
}
千纸鹤带着心事 2024-08-31 11:54:57

IE6 中,它可能不起作用。供参考:MSDN

我建议使用 jQuery 来处理大多数情况:

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

在您的编码中尝试这个。

In IE6, it may not work. For reference: MSDN

I suggest using jQuery to handle most of the cases:

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

Try this in your coding.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文