HTML 태그에 사용자 정의 속성을 추가 할 수 있습니까?


348

다음과 같이 HTML 태그에 사용자 정의 속성을 추가 할 수 있습니까?

<tag myAttri="myVal" />




답변에 "예"라고 표시되어 있지만 플러그인과 함께 사용되지 않는 테마 속성 세트가 있는지 확인하십시오. 예 : "data-myuniqueattribute." 나는 보통 "data-"뒤에 어떤 문자를 두 글자 약어로 접두어로 붙인다. 예 : "data-yscolumntype" 독특하게 유지하십시오.

답변:


189

! DOCTYPE 선언 (예 : DTD)을 수정하여 [XML] 문서가 여전히 유효하도록 할 수 있습니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[
  <!ATTLIST tag myAttri CDATA #IMPLIED>
]>

#IMPLIED선택적인 속성이거나 #REQUIRED, 등을 사용할 수 있음을 의미합니다 .

자세한 정보는 DTD- 속성에 있습니다.


2
html 파일의 맨 위에 모든 것을 넣으십시오 (xhtml 1.0 transitional이 정상이라고 가정)
carillonator

8
어쩌면 내가 누락 된 것이 있지만이 방법을 따르면 렌더링 된 웹 페이지에]>가 나타납니다. Firefox 3.6에서 발생합니다. alistapart.com/articles/customdtd 의이 스 니펫은 다음과 같은 동작을 확인하는 것 같습니다. "이 기사의 샘플 파일을 다운로드하고 internal.html 파일의 유효성을 검사하면이를 직접 확인할 수 있습니다. 불행히도 브라우저에 파일을 표시 할 때 ,]>가 화면에 표시됩니다.이 버그를 해결할 수있는 방법이 없으므로이 방법은 바로 가능합니다. "
Mike

3
"]>"모양에 도움이되는 몇 가지 사항 : 파일 이름 확장명을 .xhtml로 저장하십시오. 파일에 MIME 형식을 포함하십시오 <meta http-equiv="content-type" content="application/xhtml+xml" />.
LS

4
브라우저 동작이 고려되는 한 속성 선언은 의미가 없습니다. DTD를 읽지 않습니다. 또한 내부 서브 세트 (여기에서 사용됨)를 제대로 건너 뛸 수 없어서 "]>"오류를 설명합니다. 이 선언은 공식적인 검증에만 해당되며 프로덕션 페이지에는 사용해서는 안됩니다.
Jukka K. Korpela

32
이 답변은 XHTML 및 HTML 4.01 이상에만 적용됩니다. 접두사를 접두어로 사용하면 자신 만의 속성을 만들 수 있다는 사실이 완전히 사라 data-졌습니다.
brentonstrine

299

원하는대로 요소에 사용자 정의 속성을 추가 할 수 있습니다. 그러나 그렇게하면 문서가 유효하지 않게됩니다.

HTML 5에서는 접두사가 붙은 맞춤 데이터 속성data- 을 사용할 수 있습니다 .


169
"무효"는 아무것도 의미하지 않는다는 것을 기억하십시오. 페이지가 100 % 잘 렌더링됩니다.
John Farrell

22
실제로 "유효하지 않음"은 매우 실제적인 의미를 갖습니다. 예를 들어 문서를 쿼크 모드 렌더링에 넣을 수 있습니다. 어쨌든 HTML5 doctype을 사용하면 유효합니다.
brentonstrine

hsivonen.fi/doctype/#handling 에는 다양한 doctype 및 해당 브라우저 모드가 나와 있습니다 . HTML5 doctype은 2001 년 이후의 모든 브라우저를 (전체) 표준 모드로 전환합니다. XHTML 경과 및 HTML 4 (특히 DTD없이) 과도적인 doctypes는 :)하지 않습니다
일리아 Streltsyn

거룩한 달콤한 그리스도, 감사합니다. @jfar 맞지만 가독성이 떨어집니다.
Nevermore

내 문서는 |CSS에서 허용되지 않는다고 알려주기 때문에 어쨌든 유효 하지 않습니다 href. 그러나 Google Fonts에 필요한 것입니다
Post Self

73

아니요, 유효성 검사가 중단됩니다.

HTML 5에서는 사용자 정의 속성을 추가하거나 추가 할 수 있습니다. 이 같은:

<tag data-myAttri="myVal" />

8
그러나 유효성 검사는 신경 쓰지 않고 자바 스크립트로 액세스 할 수 있기를 원합니다.
lovespring

10
물론 작동합니다. 그러나 고의로 유효하지 않은 문서를 작성하는 것은 좋은 생각이 아닙니다.

31
유효하지 않은 문서를 작성하는 것이 좋습니다. Google은로드 시간을 줄 이도록 작성하고 캔버스를 사용하는 모든 사이트에서이를 사용하여 더 나은 사용자 경험을 제공하며 자바 스크립트 프레임 워크를 사용하여 html 요소에서 의미있는 데이터를 가져 오는 것이 맞춤 속성 기술을 사용하는 것이 훨씬 쉽습니다.
John Farrell

3
@jfar : 캔버스가 유효하지 않습니다. HTML 4.01에는 없습니다. 그러나 이는 곧 HTML5 사양에서 완벽하게 합법적 인 부분입니다.
bcat

3
"유효하지 않음"은 무엇을 의미합니까? 허용되는 사양의 일부가 아닙니다. 존재하지 않는 사양에 대해 어떻게 유효합니까?
John Farrell



11

그렇습니다, 당신은 질문 자체에서 그것을 할 수 있습니다 <html myAttri="myVal"/>.


2
HTML을 정의한 내용에 따라 다릅니다. HTML을 특정 요소 및 속성 집합이있는 SGML 기반 언어로 생각합니다. XHTML은 HTML과 매우 유사한 특정 요소 및 속성 집합을 가진 XML의 변형입니다. 자신의 속성을 사용할 때 여전히 SGML은 XML이지만 더 이상 XHTML은 HTML이 아닙니다.
Douwe Maan

엄격한 의미의 표준이 아니라 사용자 정의 속성이 포함 된 경우 구문 분석에 실패하지 않아야하는 일종의 요구 사항을 구현하는 임시 확장으로 가져 가십시오.
luvieere 2018

2
DouweM : 물론 SGML이나 XML이 아닌 HTML5의 HTML 직렬화는 항상 존재합니다.
bcat

2
그리고 당신은 그 과정에서 문서를 깨뜨 렸습니다. 좋은 습관이 아닙니다.
carillonator

10

var demo = document.getElementById("demo")
console.log(demo.dataset.myvar)
// or
alert(demo.dataset.myvar)
//this will show in console the value of myvar
<div id="demo" data-myvar="foo">anything</div>


2
답변에 간단한 설명을 추가하십시오.
Nikolay Mihaylov

10

예, 할 수 있습니다!

다음 HTML태그가있는 경우 :

<tag key="value"/>

다음과 JavaScript같이 속성에 액세스 할 수 있습니다 .

element.getAttribute('key'); // Getter
element.setAttribute('key', 'value'); // Setter

Element.setAttribute()HTML존재하지 않는 경우 속성을 태그 에 넣습니다 . 따라서 HTML로 설정하려는 경우 코드 에서 선언 할 필요가 없습니다 JavaScript.

key: 속성에 원하는 이름이 될 수 있지만 현재 태그에는 아직 사용되지 않았습니다. value: 항상 필요한 것을 포함하는 문자열입니다.


7

JavaScript에서 속성을 설정할 수 있습니다.

document.getElementById("foo").myAttri = "myVal"

4

예를 들면 다음과 같습니다.

document.getElementsByTagName("html").foo="bar"

다음은 사용자 정의 속성을 body 태그 요소로 설정하는 다른 예입니다.

document.getElementsByTagName('body')[0].dataset.attr1 = "foo";
document.getElementsByTagName('body')[0].dataset.attr2 = "bar";

그런 다음 다음을 수행하여 속성을 읽으십시오.

attr1 = document.getElementsByTagName('body')[0].dataset.attr1
attr2 = document.getElementsByTagName('body')[0].dataset.attr2

DevTools의 콘솔 에서 위의 코드를 테스트 할 수 있습니다.

JS 콘솔, Chrome의 DevTools


1

data-any를 사용하고 많이 사용합니다.

<aside data-area="asidetop" data-type="responsive" class="top">

data-*JavaScript에서 가치 를 얻는 방법은 무엇입니까?
Aaron Franke

0

깨끗하고 문서를 유효하게 유지하는 또 다른 접근법은 원하는 데이터를 다른 태그 (예 : id)에 연결 한 다음 split을 사용하여 원하는 때에 원하는 것을 가져 오는 것입니다.

<html>
<script>
  function demonstrate(){
    var x = document.getElementById("example data").querySelectorAll("input");
    console.log(x);
    for(i=0;i<x.length;i++){
      var line_to_illustrate = x[i].id  + ":" + document.getElementById ( x[i].id ).value;
      //concatenated values
      console.log("this is all together: " + line_to_illustrate); 
      //split values
      var split_line_to_illustrate = line_to_illustrate.split(":");
      for(j=0;j<split_line_to_illustrate.length;j++){
        console.log("item " + j+ " is: " + split_line_to_illustrate[j]);
      }      
    }
  }
</script> 

<body>

<div id="example data">
  <!-- consider the id values representing a 'from-to' relationship -->
  <input id="1:2" type="number" name="quantity" min="0" max="9" value="2">
  <input id="1:4" type="number" name="quantity" min="0" max="9" value="1">
  <input id="3:6" type="number" name="quantity" min="0" max="9" value="5">  
</div>

<input type="button" name="" id="?" value="show me" onclick="demonstrate()"/>

</body>
</html>

0

추가 할 수는 있지만 JavaScript 코드도 작성해야합니다.

document.createElement('tag');

모든 것이 제자리에 있는지 확인하십시오. 나는 Internet Explorer를 의미한다 :)


3
태그 이름이 IE에 알려지지 않은 경우 관련이 있습니다. 여기서 문제는 사용자 정의 태그가 아닌 사용자 정의 속성입니다. <tag ...>여기서 "태그"라는 단어는 HTML 태그를 의미합니다.
Jukka K. Korpela

인식 된 태그가 아닌 한 XHTML도 무효화하지 않습니까?
Paul

0

잘! 실제로 원하는 속성을 데이터 속성으로 위장하여 여러 가지 맞춤 HTML 속성을 만들 수 있습니다.

예.

[attribute='value']{
color:red;
}
<span attribute="value" >hello world</span>

그것은 분명히 작동하지만 문서를 무효화 할 것입니다 .JScript를 사용하여 사용자 정의 속성이나 요소를 가질 필요가 없다면, 새로운 공식화 된 (사용자 정의) 속성을 처리하는 것과 같은 방식으로 처리하면됩니다. "데이터"속성

기억 "무효"는 없습니다 평균 아무것도 않습니다. 문서가 항상 제대로로드됩니다. 일부 브라우저는 실제로 DOCTYPE ..... 만 있으면 문서의 유효성을 검사 할 것입니다.


-8

다음과 같이 속성 대신 JavaScript에서 원하는 값을 추출 할 수 있습니다.

<a href='#' class='click'>
    <span style='display:none;'>value for JavaScript</span>some text
</a>

이유가있는 속성이 있습니다. 같은 일을 <input type="hidden" value="...">합니다. 그러나 숨겨진 필드에 넣을 수있는 데이터와 대조적으로 다양한 속성에 넣은 데이터 유형의 차이를 고려하십시오. 메타 데이터 조각을 유지하기 위해 <span>모든 것을 숨기는 것은 <a>좋은 방법이 아닙니다. 귀하의 사이트에 따라 다르며 JS (우아한 퇴보, 사람들)에 크게 의존합니다.
Jay Edwards
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.