<body id="page">
in HTML => body.id="page"
in DOMdocument.body.myData = {
name: 'Caesar',
title: 'Imperator'
};
alert(document.body.myData.title); // Imperator
document.body.sayTagName = function() {
alert(this.tagName); //
};
document.body.sayTagName(); // BODY (this가 document.body를 가리키므로)
<body id="test" something="non-standard">
<script>
alert(document.body.id); // test
alert(document.body.something); // undefined
</script>
</body>
type
attribute는 <input>
element에서는 표준이지만, <body>
에서는 표준이 아님<body id="body" type="body">
<input id="input" type="text" />
<script>
alert(input.type); // text
alert(body.type); // undefined
</script>
</body>
element.hasAttribute(name)
: 'name' attribute의 존재 여부를 확인해주는 메서드element.getAttribute(name)
: 'name' attribute의 값을 가져오는 메서드element.setAttribute(name, value)
: 'name' attribute의 값을 'value'로 변경하는 메서드element.removeAttribute(name)
: 'name' attribute를 지우는 메서드element.attributes
: 'element'의 모든 attribute가 담긴 collection을 읽을 수 있는 메서드Attr
노드를 포함한 NamedNodeMap 형 객체name
과 value
property가 있는 객체<body something="non-standard">
<script>
alert(document.body.getAttribute(something)); // non-standard
</script>
</body>
id
와 ID
는 동일함<body>
<div id="elem" about="Elephant"></div>
<script>
// attribute 읽기
alert(elem.getAttribute('About'));
// attribute 추가하기
elem.setAttribute('Test', 123);
// 추가한 attribute 확인하기
alert(elem.outerHTML);
// attribute 전체 나열하기
for (let attr of elem.attributes) {
alert(`${attr.name} = ${attr.value}`);
}
</script>
</body>
element.outerHTML
을 사용하면 element의 직접 추가한 attribute를 포함한 모든 attribute를 볼 수 있음element.attributes
가 반환한 collection은 열거 가능함(iterable)name
, value
property를 사용하여 attribute 전체에 접근 가능함<input>
<script>
let input = document.querySelector('input');
// attribute 추가 => property 갱신
input.setAttribute('id', 'id');
alert(input.id); // id (갱신)
// property 변경 => attribute 갱신
input.id = 'newId';
alert(input.getAttribute('id')); // newId (갱신)
</script>
<input>
<script>
let input = document.querySelector('input');
// attribute 추가 => property 갱신
input.setAttribute('value', 'text');
alert(input.value); // text (갱신)
// property를 변경해도 attribute이 갱신되지 않음
input.value = 'newValue';
alert(input.getAttribute('value')); // text (갱신 안됨!)
</script>
input.checked
property 값의 type : booleanstyle
property 값의 type : object<input id="input" type="checkbox" checked> checkbox
<script>
alert(input.getAttribute('checked')); // attribute 값: ''
alert(input.checked); // property 값: true
</script>
<div id="div" style="color:red;font-size:120%">Hello</div>
<script>
alert(div.getAttribute('style')); // attibute 값 : 'color:red;font-size:120%'
alert(div.style); // property 값 : [object CSSStyleDeclaration]
alert(div.style.color); // red
</script>
href
attribute이 상대 URL이거나 #hash
이더라도 href
property에는 항상 URL 전체가 저장됨<a id="a" href="#hello">link</a>
<script>
alert(a.getAttribute('href')); // #hello
alert(a.href); // http://site.com/page#hello
</script>
href
attribute 값을 정확하게 얻고 싶다면 element.getAttribute
를 사용하기<style>
/* 스타일이 커스텀 속성 'order-state'에 따라 변합니다. */
.order[order-state="new"] {
color: green;
}
.order[order-state="pending"] {
color: blue;
}
.order[order-state="canceled"] {
color: red;
}
</style>
<div class="order" order-state="new">
A new order.
</div>
<div class="order" order-state="pending">
A pending order.
</div>
<div class="order" order-state="canceled">
A canceled order.
</div>
data-*
dataset
property를 사용하면 'data-'로 시작하는 모든 attribute에 접근할 수 있음<body data-about="Elephants">
<script>
alert(document.body.dataset.about); // Elephants
</script>
data-*
attribute
data-order-state
와 같이 여러 단어로 구성된 attribute는 카멜 표기법(camel-cased)을 사용하여 dataset.orderState
로 변환됨
<style>
.order[data-order-state="new"] {
color: green;
}
.order[data-order-state="pending"] {
color: blue;
}
.order[data-order-state="canceled"] {
color: red;
}
</style>
<div id="order" class="order" data-order-state="new">
A new order.
</div>
<script>
// 읽기
alert(order.dataset.orderState); // new
// 수정하기
order.dataset.orderState = "pending"; // order div의 CSS color가 blue가 됨
</script>
Attribute | Property | |
---|---|---|
HTML에서 사용됨 | DOM 객체에서 사용됨 | |
value | 문자열 | 모든 타입이 가능함 |
name | 대소문자 구분하지 않음 | 대소문자 구분함 |