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.