IE 5에서 HTML5 사용자 정의 데이터 속성이 "작동"합니까?


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
Vivin Paliath

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.dataset아직 undefined어느 쪽도 지원하지 현대 브라우저에서.
Marcel Korpel

7
jeffth의 jeffth, 19 명의 jeffty-jeff.
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을 사용하여 얼마 전에 이것을 테스트했으며 올바르게 작동합니다 (쿼크 모드에서도).

그러나 이것은 물론 HTML5 특정 속성과 관련이 없습니다.


4
완전히 HTML5 데이터 속성을 실제로 지원하는 것은 아닙니다. 그래도 그들을 활용하는 방법처럼 들립니다.
Paul D. Waite

올바른 것은 컬렉션에 물건을 넣는 데이터 API를 지원하지 않습니다 (아무도 이것을 지원하지 않습니다). 그러나 get / Set Attribute에 표시된 것처럼 최소한의 DOM 인식 브라우저에서 즉시 data-attribute의 주요 사용을 얻을 수 있습니다. 누락 된 컬렉션을 만들려는 경향이 있다면 아마도 원숭이 패치 브라우저 일 수도 있습니다. 최근의 책 실험에서 데이터 속성을 사용할 수 있으며 스타일 정보와 임의의 메타 데이터를 포함하도록 클래스 속성 값을 오버로드하는 현재의 일반적인 구성표보다 훨씬 뛰어납니다.
토마스 파월

"누락 된 컬렉션을 만들려는 경향이 있다면 아마도 원숭이 패치 브라우저 일 수도 있습니다." — 그래, CSS와 비교할 때 JavaScript가 좋은 점이다. 프로그래밍 언어이기 때문에 호환성 문제를 직접 해결할 수있다.
Paul D. Waite

많은 웹 개발자들에 따르면 IE 6이 "죽은"것으로 간주되어야하기 때문에이 답변이 여전히 많은 신용을 얻는 것에 놀랐습니다.
Marcel Korpel

6
@Marcel : 상당수의 사이트는 여전히 IE 6을 독자의 무시할 수없는 부분으로 생각합니다. 어쩌면에 또 다른 십년 우리는 더 이상 걱정할 필요가 없습니다.
Paul D. Waite

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>

자바 스크립트

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
Snekse 2016 년

8
내가이 바닥에 노트와 관련된 믿을 @SnekseNote: 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 <div lala="Tom"></div>IE6에서는 괜찮을까요? 값을 어떻게 읽습니까?
Royi Namir

@RoyiNamir 나는 그것이 어떤 속성에서도 정상적으로 작동해야한다고 생각하지만 가장 잘 확인하십시오. IE6은 어디에도 없습니다.
Marko

jquery가 사라지기를 바랍니다
SuperUberDuper

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있습니다. 어떤 의미에서는 속성 자체를 효과적으로 사용할 수 있기 때문에 기능을 지원합니다.
Paul D. Waite

나는 dataset재산을 이용하여 그들에게 접근 할 이유가 없다는 것에 대한 당신의 요점을 봅니다 -나는 그것이 어떤 혜택을 제공해야하는지 모르겠습니다 getAttribute.
Paul D. Waite

2
@Paul-getAttribute에 비해 어떤 이점도 제공하지 않습니다. 그것이 제공하는 것은 속성을 사용하여 태그에 대한 데이터 저장을 처리하는 표준화 된 방법입니다. 이것은 항상 효과가 있었지만 HTML5까지 공식 표준은 아닙니다. HTML5는 단순히 기존의 비표준이지만 널리 사용되는 기능을 취해 비준하여 이름을 지정하는 방법에 대한 규칙을 추가하고 새로운 액세스 방법을 정의했습니다. 지원되지 않는다고 말하면 .dataXYZ속성을 명시 적으로 언급하고 있습니다. 당신이 말했듯이 기본 기능은 널리 지원되지만 HTML5이기 때문에 지원되지 않습니다.
Spudley 2016 년

7

IE는 항상 (적어도 IE4에서 시작하여) 이것을 지원했으며 JS에서 액세스 할 수 있다고 생각합니다. 이를 '확장 속성'이라고했습니다. 참조 된 MSDN 문서를

DOM 요소 에서 expando 속성 을 false 로 설정하면이 동작을 비활성화 할 수 있습니다 (기본적으로 true이므로 expando 속성 이 기본적으로 작동 함).

편집 : URL을 수정


아, 네, 미안합니다. 그것이 제가 의도 한 의미라고 생각하지 않습니다. 명확히하기 위해 질문을 편집했습니다.
Paul D. Waite

죄송합니다. 링크가 잘못되었습니다. 기능을 설명하는 대신이 동작을 비활성화하는 방법에 대해 설명했습니다. 링크와 텍스트를 수정했습니다.
Timores

1
getAttribute는 브라우저 간 작동하므로 여기에서 IE 쿼크에 의존 할 필요가 없습니다.
foolip

훌륭 해요, 고맙습니다. 좋은 기사도, "첫 번째 DHTML Dude 칼럼에 오신 것을 환영합니다."
Paul D. Waite

4

최신 브라우저의 dataset 속성과 같은 모든 사용자 지정 데이터 특성을 한 번에 검색하려는 경우 다음을 수행 할 수 있습니다. 이것이 내가 한 일이며 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

@Paul D. Waite : 죄송합니다. 실수로 스팸 플래그를 거부했습니다. 의심스러운 것 같습니다.
BoltClock

@ BoltClock : 그것은 꽤 괜찮습니다. 코드 제안은 실제로 다소 합리적이지만 뉴스 리더 링크는 완전히 관련이 없습니다.
Paul D. Waite

그렇다면 왜 4 년 후에도 여전히 여기 있습니까?
Dan Pantry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.