source

JavaScript를 사용하여 요소에서 CSS 클래스를 삭제합니다(jQuery 없음).

factcode 2022. 11. 15. 21:29
반응형

JavaScript를 사용하여 요소에서 CSS 클래스를 삭제합니다(jQuery 없음).

JavaScript만을 사용하여 요소에서 클래스를 삭제하는 방법을 알려주실 수 있나요?jQuery는 사용할 수 없고, 아무것도 모르기 때문에 답변을 하지 말아 주세요.

올바른 표준 방법은classList현재 대부분의 최신 브라우저 최신 버전에서 광범위하게 지원됩니다.

ELEMENT.classList.remove("CLASS_NAME");

remove.onclick = () => {
  const el = document.querySelector('#el');
  el.classList.remove("red");
}
.red {
  background: red
}
<div id='el' class="red"> Test</div>
<button id='remove'>Remove Class</button>

문서: https://developer.mozilla.org/en/DOM/element.classList

document.getElementById("MyID").className =
    document.getElementById("MyID").className.replace(/\bMyClass\b/,'');

어디에MyID는 요소의 ID이고 MyClass는 삭제할 클래스의 이름입니다.


업데이트: "My-Class"와 같은 대시 문자를 포함하는 클래스 이름을 지원하려면

document.getElementById("MyID").className =
  document.getElementById("MyID").className
    .replace(new RegExp('(?:^|\\s)'+ 'My-Class' + '(?:\\s|$)'), ' ');

이 기능을 모든 DOM 요소에 직접 굽는 방법은 다음과 같습니다.

HTMLElement.prototype.removeClass = function(remove) {
    var newClassName = "";
    var i;
    var classes = this.className.split(" ");
    for(i = 0; i < classes.length; i++) {
        if(classes[i] !== remove) {
            newClassName += classes[i] + " ";
        }
    }
    this.className = newClassName;
}
div.classList.add("foo");
div.classList.remove("foo");

자세한 것은, https://developer.mozilla.org/en-US/docs/Web/API/element.classList 를 참조해 주세요.

이것을 시험해 보세요.

function hasClass(ele, cls) {
  return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}
    
function removeClass(ele, cls) {
  if (hasClass(ele,cls)) {
    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
    ele.className=ele.className.replace(reg,' ');
  }
}

편집

좋아요, 다시 쓰세요.오랜만이네요, 저도 조금 배웠고 댓글도 도움이 됐어요.

Node.prototype.hasClass = function (className) {
    if (this.classList) {
        return this.classList.contains(className);
    } else {
        return (-1 < this.className.indexOf(className));
    }
};

Node.prototype.addClass = function (className) {
    if (this.classList) {
        this.classList.add(className);
    } else if (!this.hasClass(className)) {
        var classes = this.className.split(" ");
        classes.push(className);
        this.className = classes.join(" ");
    }
    return this;
};

Node.prototype.removeClass = function (className) {
    if (this.classList) {
        this.classList.remove(className);
    } else {
        var classes = this.className.split(" ");
        classes.splice(classes.indexOf(className), 1);
        this.className = classes.join(" ");
    }
    return this;
};


올드 포스트
I was just working with something like this. Here's a solution I came up with...

// Some browsers don't have a native trim() function
if(!String.prototype.trim) {
    Object.defineProperty(String.prototype,'trim', {
        value: function() {
            return this.replace(/^\s+|\s+$/g,'');
        },
        writable:false,
        enumerable:false,
        configurable:false
    });
}
// addClass()
// first checks if the class name already exists, if not, it adds the class.
Object.defineProperty(Node.prototype,'addClass', {
    value: function(c) {
        if(this.className.indexOf(c)<0) {
            this.className=this.className+=' '+c;
        }
        return this;
    },
    writable:false,
    enumerable:false,
    configurable:false
});
// removeClass()
// removes the class and cleans up the className value by changing double 
// spacing to single spacing and trimming any leading or trailing spaces
Object.defineProperty(Node.prototype,'removeClass', {
    value: function(c) {
        this.className=this.className.replace(c,'').replace('  ',' ').trim();
        return this;
    },
    writable:false,
    enumerable:false,
    configurable:false
});

이제 전화를 걸 수 있습니다.myElement.removeClass('myClass')

또는 체인:myElement.removeClass("oldClass").addClass("newClass");

아주 간단한 것 같아요.

document.getElementById("whatever").classList.remove("className");

시험:

function removeClassName(elem, name){
    var remClass = elem.className;
    var re = new RegExp('(^| )' + name + '( |$)');
    remClass = remClass.replace(re, '$1');
    remClass = remClass.replace(/ $/, '');
    elem.className = remClass;
}
var element = document.getElementById('example_id');
var remove_class = 'example_class';

element.className = element.className.replace(' ' + remove_class, '').replace(remove_class, '');

다음 JS 스니펫코드를 사용합니다.

우선 모든 클래스에 도달한 후 목표 클래스의 인덱스에 따라 className = "를 설정합니다.

Target = document.getElementsByClassName("yourClass")[1];
Target.className="";
document.getElementById("whatever").className += "classToKeep";

기존 클래스를 덮어쓰는 대신 더하기 기호('+')가 클래스를 추가합니다.

언급URL : https://stackoverflow.com/questions/2155737/remove-css-class-from-element-with-javascript-no-jquery

반응형