실제적인 예를 보려면 "제한된 길이의 텍스트 입력 영역"을 살펴보세요. 카운터의 구조와 렌더링 스타일은 다음과 같습니다(구조는 JavaScript에 의해 동적으로 생성되지만 이 예에는 영향을 주지 않습니다).
12/1250
div.counter {
글꼴 크기: 80%;
왼쪽 여백: 10px;
}
범위. toumuch {
font-weight:
color: #cc0000;
}
스크립트에서 사용자가 입력한 텍스트가 최대 길이에 도달하면 toumuch에 대한 카운터로 클래스를 수정합니다.
[길이 제한 텍스트 입력 영역, 20-23행]
if (currentLength > maxLength )
this.관련Element.className = 'toomuch';
else
this.관련Element.className = ''
카운터는 굵은 글씨와 빨간색으로 변경됩니다.
id 변경은 거의 동일한 방식으로 작동합니다.
p {
color: #000000; /* black */
}
p#emphasis {
color: #cc0000; /* 빨간색 */
}
테스트
문서 .getElementsByTagName('p')[0].id = 'emphasis';
이 단락의 텍스트가 다시 빨간색으로 변합니다. 다만, 아이디를 너무 많이 변경하지 않는 것이 좋습니다. CSS Hooks로 사용되는 것 외에도 JavaScript Hooks로도 자주 사용되며 이를 변경하면 불특정 부작용이 발생할 수 있습니다.
클래스 추가
일반적으로 요소의 클래스에 새 값을 설정하지 않고 클래스만 추가합니다. 요소에 이미 있는 스타일을 제거하고 싶지 않기 때문입니다. CSS는 복합 스타일을 허용하므로 기존 클래스에서 CSS 지시어를 제거하지 않고도 새 클래스에 포함된 스타일이 요소에 추가됩니다.
"Form Validation"의 writeError() 및 RemoveError() 함수가 좋은 예입니다. 일반적으로 그래픽 디자이너는 입력 필드에 대해 두 개 또는 세 개의 너비를 사용하는 경우가 많기 때문에 양식 필드에 여러 클래스를 적용합니다. 양식 필드에 오류가 있을 때 특별한 경고 스타일을 추가하고 싶지만 요소에 이미 있는 스타일을 엉망으로 만들고 싶지는 않습니다. 따라서 단순히 이전 클래스 값을 덮어쓸 수는 없습니다. 그러면 지정한 너비가 손실됩니다.
이 상황을 보세요:
input.smaller {
width: 75px
}
input.errorMessage {
border-color: #cc0000;
}
처음에는 입력 상자의 너비가 75px입니다. 스크립트가 클래스를 'errorMessage'로 설정하고 이전 값을 삭제하면 양식 필드에 빨간색 테두리가 표시되지만 너비도 손실되어 사용자에게 매우 혼란스러울 수 있습니다.
따라서 errorMessage 클래스를 추가했습니다.
[양식 유효성 검사, 105~106행]
function writeError(obj,message) {
obj .className = ' errorMessage';
이 코드는 기존 className을 가져오고 그 뒤에 새 클래스를 추가하며 그 앞에 공백을 추가합니다. 이 공간은 객체가 이미 가지고 있을 수 있는 클래스 값과 새 클래스를 구분합니다. 이제 입력 상자에는 너비가 75px일 뿐만 아니라 예상한 대로 빨간색 테두리가 있습니다. 이제 양식 필드에 두 개의 클래스가 적용되었으며 HTML은 다음과 같습니다.
공백이 있는 Mozilla의 클래스 이름
removeError( )가 나타날 수 있습니다. errorMessage 클래스의 값을 제거할 때 선행 공백이 없습니다. 그 이유는 브라우저 버그 때문입니다. 원래 값이 없었던 클래스에 errorMessage를 추가하면 Mozilla는 선행 공백을 제거합니다. 그런 다음 교체(/errorMessage/,'')를 실행하면 선행 공백이 더 이상 존재하지 않기 때문에 문자열 errorMessage를 찾을 수 없기 때문에 Mozilla는 클래스를 제거할 수 없습니다.
클래스 제거
사용자가 오류를 수정하면 errorMessage 클래스의 값은 제거되어야 하지만 더 작은 클래스와 같은 원래 클래스는 영향을 받아서는 안 됩니다. RemoveError() 함수는 다음 함수를 제공합니다: