이미 클래스가 있는 요소가 있습니다:
<div class="someclass>
<img ... id="image1" name="image1" />
</div>
이제 div
에 클래스를 추가하는 자바스크립트 함수를 만들고 싶습니다(대체가 아니라 추가).
어떻게 할 수 있을까요?
요소의 className
속성에 공백과 새 클래스 이름을 추가합니다. 먼저 요소에 ID
를 추가하여 쉽게 참조할 수 있도록 합니다.
<div id="div1" class="someclass">
<img ... id="image1" name="image1" />
</div>
그런 다음
var d = document.getElementById("div1");
d.className += " otherclass";
다른 클래스` 앞의 공백에 유의하세요. 공백을 포함하지 않으면 클래스 목록에서 그 앞에 오는 기존 클래스가 손상되므로 공백을 포함해야 합니다.
MDN의 element.className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className)도 참조하세요.
이 프레임워크는 없이 사용할 수 있는 가장 쉬운 방법으로 엘레멘트리클레슬리스트리아다 메서드입니다.
var element = document.getElementById("div1");
element.classList.add("otherclass");
element.classList.remove("otherclass");
내가 포지셔닝하십시오 빈 공간을 추가할 필요가 없으므로, 중복된 항목을 취급료 myself (원하는거요 사용할 때 필요한 '이' 도쿠망스클레스나미 외곽진입). 하지만 몇 가지 [있지만브라우저에 한계에는] [2], [폴리필스] [3] 사용하여 patran 해결할 수 있습니다.
[2]: http://caniuse.com/ # 성과 = 클레슬리스트 [3]: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills # wiki 클레슬리스트
금지커서 호환적 -
다음 예에서는 ',', '요소' 을 < body> classname 추가하겠습니다. 이는 ie 8 호환적.
a = 도쿠망.브로디 var. 아스클레슬리스트? 아스클레슬리스트리아다 (& # 39, classname& # 39;) . 아스클레스나미 + = & # 39. # 39 classname&;;
이는 대표 다음.
a = 도쿠망.브로디 var. if (아스클레슬리스트) { 아스클레슬리스트리아다 (& # 39, wait& # 39;). } else { 아스클레스나미 + = & # 39. # 39 wait&;; }
성능 -
이를 통해 성능과 더 관심이 있는 경우 상호 호환성 줄일 수 있습니다 다음 원하는거요 4% 정도 빠릅니다.
z = 도쿠망.브로디 var. 도쿠망.보디리클레슬리스트리아다 (& # 39, wait& # 39;).
또는 그 결과 성능이 상당히 느린 jQuery 사용할 수 있습니다. 느린 에스페르프 따르면 94%
$ (# 39, & # 39, body&) 지아다클레스 (& # 39, wait& # 39;).
성능 -
Jquery 클래스를 사용하여 선택적으로 제거하기 위한 성능 때문에 어려움을 겪고 있는 경우 가장 좋은 방법입니다
& # 39 도쿠망.브로디, c = a = var. # 39 classname&;; $ (a) 그레모베클레스 (c).
& # 39 도쿠망.브로디, c = a = var. # 39 classname&;; (c, & # 39, & # 39, 아스클레스 마이어플레이스 아스클레스나미 = ); 아스클레스나미 = 아스클레스나미 + c;
Element("document.body").ClassNames.add("classname")
Element("document.body").ClassNames.remove("classname")
Element("document.body").ClassNames.set("classname")
YAHOO.util.Dom.hasClass(document.body,"classname")
YAHOO.util.Dom.addClass(document.body,"classname")
YAHOO.util.Dom.removeClass(document.body,"classname")
function addClass( classname, element ) {
var cn = element.className;
//test for existance
if( cn.indexOf( classname ) != -1 ) {
return;
}
//add a space if the element already has class
if( cn != '' ) {
classname = ' '+classname;
}
element.className = cn+classname;
}
function removeClass( classname, element ) {
var cn = element.className;
var rxp = new RegExp( "\\s?\\b"+classname+"\\b", "g" );
cn = cn.replace( rxp, '' );
element.className = cn;
}
이 클래스 하나만 추가하는 것 이상의 작업을 수행한다고 가정하면(예: 비동기 요청 등이 함께 진행된다면), Prototype 또는 jQuery와 같은 라이브러리를 사용하는 것이 좋습니다.
이렇게 하면 이 작업을 포함하여 필요한 거의 모든 작업을 매우 간단하게 만들 수 있습니다.
이제 페이지에 jQuery가 있다고 가정하면 다음과 같은 코드를 사용하여 요소에 클래스 이름을 추가할 수 있습니다(이 경우 로드 시):
$(document).ready( function() {
$('#div1').addClass( 'some_other_class' );
} );
다른 내용은 jQuery API 브라우저를 확인하세요.
Class 를 사용할 수 있는 방법을 클레슬리스트리아다 또는 클레슬리스트롬레모프 추가/제거 요소.
var nameElem = document.getElementById("name")
nameElem.classList.add("anyclss")
위의 코드는 아닌 교체), 클래스 " anyclass" 추가할 예정입니다. 를 나미렘. 마찬가지로 () 메서드를 사용하여 클래스의 제거하시겠습니까 클레슬리스트롬레모프 사용할 수 있습니다.
nameElem.classList.remove("anyclss")
클래스 추가 요소를 제거하지 않고, 기존 값뿐만 덮어쓰기/추가 공백과 등 새로운 classname / 영향을 미치고 있습니다.
document.getElementById("MyElement").className += " MyClass";
모두 바꾸려면 기존 클래스를 설정할 수 있는 새로운 클래스가 하나 이상의 className 속성:
document.getElementById("MyElement").className = "MyClass";
(공백으로 구분된 목록으로 적용하십시오 여러 클래스를 사용할 수 있습니다.)
function addClass(elem, clazz) {
if (!elemHasClass(elem, clazz)) {
elem.className += " " + clazz;
}
}
function elemHasClass(elem, clazz) {
return new RegExp("( |^)" + clazz + "( |$)").test(elem.className);
}
Ie9 는 공식 · 정보기술 (it) '와' 엘레멘트리클레슬리스트 그러니까말이야 hutdown 조성할 수 많은 리즈한테 그들위에 하지만 방금 했던 많은 대답 없이 클레슬리스트 작동하잖아 방법 '' 내가 도움을 그들위에 배울 수 있을 것입니다.
그 많은 답변 위와 아래 코드를 연장시킵니다 향상합니다 피할 수 있어 추가 복제본임을 클래스뿐만.
function addClass(element,className){
var classArray = className.split(' ');
classArray.forEach(function (className) {
if(!hasClass(element,className)){
element.className += " "+className;
}
});
}
//this will add 5 only once
addClass(document.querySelector('#getbyid'),'3 4 5 5 5');
단지 다른 사람들의 말하였노라 대해 구체적인 여러 CSS 클래스는 문자열 결합됨 하나의 구분된 독창적이다. 따라서 이 경우 하드 코드, 하고 싶은 것이 단순히 다음과 같습니다.
<div class="someClass otherClass yetAnotherClass">
<img ... id="image1" name="image1" />
</div>
여기서 새로운 클래스를 파생합니다 javascript 를 추가할 필요가 쉽게 할 수 있습니다. 그냥 그 뒤를 이어 새 클래스 s # 39 에 스페이스 덮어쓰기/추가 element& className 재산이잖아. 이 함수를 작성할 것을 나중에 필요할 때 클래스 지루려면 할 수도 있습니다.
추가, 제거 또는 체크 요소점 클래스에 간단한 방법입니다.
var uclass = {
exists: function(elem,className){var p = new RegExp('(^| )'+className+'( |$)');return (elem.className && elem.className.match(p));},
add: function(elem,className){if(uclass.exists(elem,className)){return true;}elem.className += ' '+className;},
remove: function(elem,className){var c = elem.className;var p = new RegExp('(^| )'+className+'( |$)');c = c.replace(p,' ').replace(/ /g,' ');elem.className = c;}
};
var elem = document.getElementById('someElem');
//Add a class, only if not exists yet.
uclass.add(elem,'someClass');
//Remove class
uclass.remove(elem,'someClass');
현대 외곽진입 유사물 jQuery 를 사용할 수 있습니다.
하나만 변경해야 할 경우에는 DOM element, 첫 번째 방정식입니다 JS 에서 발견하리니 이 사용할 수 있습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
document.querySelector('.someclass').className += " red";
.red {
color: red;
}
<div class="someclass">
<p>This method will add class "red" only to first element in DOM</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
끝 - < 스니핏 >;!
여러 클래스뿐만 추가할 경우 이 같은 새로운 클래스를 사용할 수 있습니다
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
document.querySelectorAll('.someclass').forEach(function(element) {
element.className += " red";
});
.red {
color: red;
}
<div class="someclass">
<p>This method will add class "red" to all elements in DOM that have "someclass" class.</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
끝 - < 스니핏 >;!
나도 같이 사용할 수 있는 가장 빠른 방법은 생각하노라 엘레망스프로토티페리클레스리스트 es5: '도쿠망스케리셀레스 (.my.super-class" ";)' 리클레슬리스트리아다 (& # 39, new-class& # 39;) 하지만, 어쨌든 폴리필 엘레망스프로토티페리클레스리스트 ie8 이 스니핏을 함께 이 같은 것은 없습니다 수 있습니다 (free to 향상시키십시오 떨어진 편집 및 it):
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
if(Element.prototype.classList === void 0){
function DOMTokenList(classes, self){
typeof classes == "string" && (classes = classes.split(' '))
while(this.length){
Array.prototype.pop.apply(this);
}
Array.prototype.push.apply(this, classes);
this.__self__ = this.__self__ || self
}
DOMTokenList.prototype.item = function (index){
return this[index];
}
DOMTokenList.prototype.contains = function (myClass){
for(var i = this.length - 1; i >= 0 ; i--){
if(this[i] === myClass){
return true;
}
}
return false
}
DOMTokenList.prototype.add = function (newClass){
if(this.contains(newClass)){
return;
}
this.__self__.className += (this.__self__.className?" ":"")+newClass;
DOMTokenList.call(this, this.__self__.className)
}
DOMTokenList.prototype.remove = function (oldClass){
if(!this.contains(newClass)){
return;
}
this[this.indexOf(oldClass)] = undefined
this.__self__.className = this.join(' ').replace(/ +/, ' ')
DOMTokenList.call(this, this.__self__.className)
}
DOMTokenList.prototype.toggle = function (aClass){
this[this.contains(aClass)? 'remove' : 'add'](aClass)
return this.contains(aClass);
}
DOMTokenList.prototype.replace = function (oldClass, newClass){
this.contains(oldClass) && this.remove(oldClass) && this.add(newClass)
}
Object.defineProperty(Element.prototype, 'classList', {
get: function() {
return new DOMTokenList( this.className, this );
},
enumerable: false
})
}
끝 - < 스니핏 >;!
다음은 기능 사용 방법은 있습니다. 사용한 ES6 ES5 및 함수 또는 함수 정의, 무료로 사용할 수 있지만 어떤 기분이 표현식에서는 각자의 JavaScript 스테일구이데.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
'use strict'
const oldAdd = (element, className) => {
let classes = element.className.split(' ')
if (classes.indexOf(className) < 0) {
classes.push(className)
}
element.className = classes.join(' ')
}
const oldRemove = (element, className) => {
let classes = element.className.split(' ')
const idx = classes.indexOf(className)
if (idx > -1) {
classes.splice(idx, 1)
}
element.className = classes.join(' ')
}
const addClass = (element, className) => {
if (element.classList) {
element.classList.add(className)
} else {
oldAdd(element, className)
}
}
const removeClass = (element, className) => {
if (element.classList) {
element.classList.remove(className)
} else {
oldRemove(element, className)
}
}
끝 - < 스니핏 >;!
함께 샘플링합니다 순결케 JS. 예를 들어, s id 및 추가 # 39 의 첫 번째 사례 우리 lionbridge element& 2 클래스뿐만.
document.addEventListener('DOMContentLoaded', function() {
document.getElementsById('tabGroup').className = "anyClass1 anyClass2";
})
document.addEventListener('DOMContentLoaded', function() {
document.getElementsByClassName('tabGroup')[0].className = "tabGroup ready";
})
1 및 [로다시] 를 사용하는 것이 좋다 '의 업데이트하려면 className' 문자열.
// get element reference
var elem = document.getElementById('myElement');
// add some classes. Eg. 'nav' and 'nav header'
elem.className = _.chain(elem.className).split(/[\s]+/).union(['nav','navHeader']).join(' ').value()
// remove the added classes
elem.className = _.chain(elem.className).split(/[\s]+/).difference(['nav','navHeader']).join(' ').value()
첫째, div id 를 함수 호출 열거하십시오 하였으매 아펜드클레스:
<script language="javascript">
function appendClass(elementId, classToAppend){
var oldClass = document.getElementById(elementId).getAttribute("class");
if (oldClass.indexOf(classToAdd) == -1)
{
document.getElementById(elementId).setAttribute("class", classToAppend);
}
}
</script>
Api 를 선택할 수 있는 함수를 사용할 수 있는 요소는 크리스 엘리스 만들고 요소와 새로운 classname tpc. 매개변수입니다. Ie8 에 대한 다른 브라우저를 사용하는 현대 클레슬리스트. 그런 다음 security. 함수은 발생한 후.
//select the dom element
var addClassVar = document.querySelector('.someclass');
//define the addclass function
var addClass = function(el,className){
if (el.classList){
el.classList.add(className);
}
else {
el.className += ' ' + className;
}
};
//call the function
addClass(addClassVar, 'newClass');