HTML5カスタムデータ属性はIE 6で「機能」しますか?


173

カスタムデータ属性: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」を含むアラートを生成しますか?


117
HTML5とIE6?ホラー...
O_o

7
data-geoff「-」文字のため、は有効なJS識別子ではないことに注意してください。dataGeoffスクリプトで使用する必要があります。
outis

3
@outis:(ドラフトの)仕様によると、どういう意味ですか?私はこれをFF 3.6とChromium 5.0.307.11で自分でテストしましたが、取得geoff.dataGeoffできませんでした。それは(whatwg.org/specs/web-apps/current-work/multipage/…)であること判明しgeoff.dataset.geoffましたelement.datasetundefined、最新のブラウザではそうであるように、どちらもサポートされていません。
Marcel Korpel

7
ジェフのジェフス、19ジェフティジェフ。
Matt Sach

2
@ANeves:これにより、識別子以外の文字を使用してプロパティにアクセスできますが、ブラウザはDOM内の同じ名前のプロパティを持つ「data-geoff」HTML属性をブリッジしないため、ここでは適用されません。
outis

回答:


153

を使用して、カスタム(または独自の)属性の値を取得できますgetAttribute。あなたの例に従って

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

data-geoff使用する価値を得ることができます

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

MSDNを参照してください。また、これを機能させるにはIE7が必要であると記載されていますが、これをIE6で少し前にテストしましたが、正常に機能しました(quirksモードでも)。

しかし、これはもちろんHTML5固有の属性とは関係ありません。


4
完全に、これはHTML5データ属性の実際のサポートではありません。それらを利用する方法のように聞こえますが。
ポールD.ウェイト2010年

これは、コレクションなどにデータを入れるデータのAPIをサポートしないので修正してください(誰もサポートしていません)。ただし、get / Set Attributeで示されているように、最小限のDOM対応ブラウザーでdata-attributesの主な使用法をすぐに取得できます。不足しているコレクションを作成する傾向がある場合は、おそらくパッチブラウザーを変更することもできます。私の最近の本の実験から、data-属性が現在使用可能であり、スタイル属性とランダムメタデータを含むようにクラス属性値をオーバーロードする現在の一般的なスキームよりもはるかに優れていることは明らかです。
トーマス・パウエル

「不足しているコレクションを作成する傾向がある場合は、おそらくブラウザにパッチを当てることもできます。」—ええ、それはCSSと比較してJavaScriptの良い点です。JavaScriptはプログラミング言語なので、互換性の問題を自分で修正できます。
ポールD.ウェイト2010年

多くのWeb開発者によると、この回答は、特にIE 6が「死んだ」と見なされるべきであるので、それでも多くの信用を得ていることに本当に驚いています。
マルセルコーペル

6
@Marcel:かなりの数のサイトで、まだIE 6が無視できないほどのオーディエンスに含まれていると思います。あと 10年でもう心配する必要はなくなるでしょう。
ポールD.ウェイト2011

141

はい、機能します。

IE getAttribute()は、jQueryがのために内部的に使用するIE4からサポートしてい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");

2
この回答はcanIuseと少し矛盾するようです。それが「部分的に」サポートされているとマークされている理由についての入力はありますか?caniuse.com/dataset
13:54のSnekse

8
@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.
Marko

@Marko <div lala="Tom"></div>IE6では問題ないでしょうか。どのように値を読みますか?
Royi Namir、2015

@RoyiNamirどの属性でも問題なく機能するはずですが、確認することをお勧めします。IE6はどこにもありません。
Marko

私はjquery
がただ消え

9

IE6はHTML5データ属性機能をサポートしていないだけでなく、事実上現在のブラウザでは事実上それらをサポートしていません。現時点での唯一の例外はChromeです。

data-geoff="geoff de geoff"属性として完全に自由に使用できますが、現在のブラウザバージョンのChromeのみが.dataGeoffプロパティを提供します。

さいわい、IE6を含むすべての現在のブラウザーは、標準のDOM .getAttribute()メソッドを使用して不明な属性を参照できるため、.getAttribute("data-geoff")どこでも機能します。

非常に近い将来、FirefoxとSafariの新しいバージョンがデータ属性をサポートするようになりますが、すべてのブラウザで機能するアクセスアクセスの完全に優れた方法がある場合、HTML5メソッドを使用する理由は実際にはありません一部の訪問者に対してのみ機能します。

CanIUse.comで、この機能の現在のサポート状況の詳細を確認できます。

お役に立てば幸いです。


1
「IE6はHTML5データ属性機能をサポートしないだけでなく、事実上、現在のブラウザはそれらをサポートしていません」-確かに、それは「サポート」の定義に依存します。このdatasetプロパティをサポートしているブラウザはありませんが、すべてのブラウザで、プレフィックスがの属性にデータを保存しdata-、(言ったように)を介してデータを取得できますgetAttribute。したがって、ある意味では、属性自体を効果的に使用できるため、機能をサポートします。
ポールD.ウェイト

datasetプロパティを使用してそれらにアクセスする理由はないというのはあなたの見解ですが、それが何を提供することになっているのかわかりませんgetAttribute
ポールD.ウェイト

2
@Paul-getAttributeに勝る利点はありません。それが提供するのは、属性を使用してタグに対するデータの格納を処理する標準化された方法です。これは常に機能していましたが、HTML5までは公式の標準にはなりませんでした。HTML5は単に、既存の非標準だが広く使用されている機能を採用して承認し、名前の付け方を示すルールを追加し、それらにアクセスするための新しい方法を定義しました。サポートされていないと言うときは、.dataXYZプロパティを明示的に参照しています。おっしゃるように、基本的な機能は広くサポートされていますが、HTML5のためではありません。
Spudley、2011年

7

IEはこれを常にサポートしており(少なくともIE4以降)、JSからアクセスできます。それらは「expandoプロパティ」と呼ばれていました。古いMSDNの記事を参照してください

この動作は、DOM要素のexpando プロパティをfalseに設定することで無効にできます(デフォルトではtrueなので、expando プロパティはデフォルトで機能します)。

編集:URLを修正


ああ、ごめんなさい、私が意図したものではないと思います。質問を編集して明確にしました。
ポールD.ウェイト2010年

申し訳ありませんが、リンクが間違っていました。機能を説明する代わりに、この動作を無効にする方法を説明しました。リンクとテキストを修正しました。
Timores

1
getAttributeはクロスブラウザで機能します。ここではIEの癖に依存する必要はありません。
foolip

優れたありがとう。素敵な記事も、「最初のDHTMLデュードコラムへようこそ」と書かれています。
ポールD.ウェイト2010年

4

新しいブラウザのデータセットプロパティのように、すべてのカスタムデータ属性を一度に取得したい場合は、次のようにします。これは私がやったことであり、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;
}

0

ではIE6、それが動作しない場合があります。参考のために:MSDN

jQueryを使用してほとんどの場合を処理することをお勧めします。

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

これをコーディングで試してください。


IE6では機能します(承認された回答を参照)。jQueryについては質問しませんでした。
Paul D. Waite 2015年

@Paul D. Waite:すみません、あなたのスパムフラグを誤って拒否しました。これは疑わしく見えます。
BoltClock

@BoltClock:大丈夫です。コードの提案は実際にはある程度妥当なものですが、そのニュースリーダーのリンクは明らかにまったく無関係です。
ポールD.ウェイト2015年

では、なぜ4年後もここにいるのでしょうか。
Dan Pantry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.