jQuery removeClass 와일드 카드
예를 들어 일치하는 모든 클래스를 제거하는 쉬운 방법이 있습니까?
color-*
그래서 요소가 있다면 :
<div id="hello" class="color-red color-brown foo bar"></div>
제거한 후에는
<div id="hello" class="foo bar"></div>
감사!
removeClass의 함수 보낸 함수 인수 얻어 jQuery를 1.4 .
$("#hello").removeClass (function (index, className) {
return (className.match (/(^|\s)color-\S+/g) || []).join(' ');
});
라이브 예 : http://jsfiddle.net/xa9xS/1409/
$('div').attr('class', function(i, c){
return c.replace(/(^|\s)color-\S+/g, '');
});
필자는 alterClass라고하는 플러그인을 작성했습니다. 와일드 카드와 일치하는 요소 클래스를 제거하십시오. 선택적으로 클래스를 추가하십시오 : https://gist.github.com/1517285
$( '#foo' ).alterClass( 'foo-* bar-*', 'foobar' )
나는 이것을 정규식을 인수로 취하는 Jquery 플러그인으로 일반화했다.
커피:
$.fn.removeClassRegex = (regex) ->
$(@).removeClass (index, classes) ->
classes.split(/\s+/).filter (c) ->
regex.test c
.join ' '
자바 스크립트 :
$.fn.removeClassRegex = function(regex) {
return $(this).removeClass(function(index, classes) {
return classes.split(/\s+/).filter(function(c) {
return regex.test(c);
}).join(' ');
});
};
따라서이 경우 사용법은 (커피와 자바 스크립트 모두)입니다.
$('#hello').removeClassRegex(/^color-/)
Array.filter
IE <9에는 존재하지 않는 함수를 사용하고 있습니다. 이 WTFPL one 과 같은 polyfill에 Underscore의 filter 함수를 대신 사용하거나 Google을 사용할 수 있습니다 .
다른 곳에서 사용하려면 확장 프로그램을 제안합니다. 이것은 나를 위해 잘 작동합니다.
$.fn.removeClassStartingWith = function (filter) {
$(this).removeClass(function (index, className) {
return (className.match(new RegExp("\\S*" + filter + "\\S*", 'g')) || []).join(' ')
});
return this;
};
용법:
$(".myClass").removeClassStartingWith('color');
우리는 모든 클래스 .attr("class")
를 Array, And Loop & Filter로 가져올 수 있습니다 .
var classArr = $("#sample").attr("class").split(" ")
$("#sample").attr("class", "")
for(var i = 0; i < classArr.length; i ++) {
// some condition/filter
if(classArr[i].substr(0, 5) != "color") {
$("#sample").addClass(classArr[i]);
}
}
데모 : http://jsfiddle.net/L2A27/1/
@ tremby의 유사 대답 , 여기 코비의 @입니다 대답 접두사 나 접미사 중 하나와 일치하는 플러그인있다.
- 예) 스트립
btn-mini
과btn-danger
아닌btn
경우stripClass("btn-")
. - 예)는 스트립
horsebtn
및cowbtn
하지만btn-mini
나btn
때stripClass('btn', 1)
암호:
$.fn.stripClass = function (partialMatch, endOrBegin) {
/// <summary>
/// The way removeClass should have been implemented -- accepts a partialMatch (like "btn-") to search on and remove
/// </summary>
/// <param name="partialMatch">the class partial to match against, like "btn-" to match "btn-danger btn-active" but not "btn"</param>
/// <param name="endOrBegin">omit for beginning match; provide a 'truthy' value to only find classes ending with match</param>
/// <returns type=""></returns>
var x = new RegExp((!endOrBegin ? "\\b" : "\\S+") + partialMatch + "\\S*", 'g');
// https://stackoverflow.com/a/2644364/1037948
this.attr('class', function (i, c) {
if (!c) return; // protect against no class
return c.replace(x, '');
});
return this;
};
https://gist.github.com/zaus/6734731
ARS81 의 답변 (시작하는 클래스 이름과 만 일치)을 기반으로 보다 유연한 버전이 있습니다. 또한 hasClass()
정규식 버전.
용법: $('.selector').removeClassRegex('\\S*-foo[0-9]+')
$.fn.removeClassRegex = function(name) {
return this.removeClass(function(index, css) {
return (css.match(new RegExp('\\b(' + name + ')\\b', 'g')) || []).join(' ');
});
};
$.fn.hasClassRegex = function(name) {
return this.attr('class').match(new RegExp('\\b(' + name + ')\\b', 'g')) !== null;
};
이렇게하면 prefix
노드 class
속성 에서 시작하는 모든 클래스 이름이 효과적으로 제거됩니다 . 다른 답변은 SVG 요소를 지원하지 않지만 (이 글을 쓰는 현재)이 솔루션은 다음을 수행합니다.
$.fn.removeClassPrefix = function(prefix){
var c, regex = new RegExp("(^|\\s)" + prefix + "\\S+", 'g');
return this.each(function(){
c = this.getAttribute('class');
this.setAttribute('class', c.replace(regex, ''));
});
};
나는 같은 문제가 있었고 밑줄의 _.filter 메소드를 사용하는 다음을 생각해 냈습니다. removeClass가 함수를 사용하고 클래스 이름 목록을 제공한다는 것을 알게되면, 그것을 클래스로 바꾸고 클래스 이름을 필터링하여 removeClass 메소드로 돌아갈 수있었습니다.
// Wildcard removeClass on 'color-*'
$('[class^="color-"]').removeClass (function (index, classes) {
var
classesArray = classes.split(' '),
removeClass = _.filter(classesArray, function(className){ return className.indexOf('color-') === 0; }).toString();
return removeClass;
});
className
요소의 DOM 객체의 속성을 사용할 수도 있습니다 .
var $hello = $('#hello');
$('#hello').attr('class', $hello.get(0).className.replace(/\bcolor-\S+/g, ''));
jQuery 플러그인의 경우 이것을 시도하십시오
$.fn.removeClassLike = function(name) {
return this.removeClass(function(index, css) {
return (css.match(new RegExp('\\b(' + name + '\\S*)\\b', 'g')) || []).join(' ');
});
};
아니면 이거
$.fn.removeClassLike = function(name) {
var classes = this.attr('class');
if (classes) {
classes = classes.replace(new RegExp('\\b' + name + '\\S*\\s?', 'g'), '').trim();
classes ? this.attr('class', classes) : this.removeAttr('class');
}
return this;
};
Element.classList를 사용하여 vanilla JavaScript 로이 작업을 수행 할 수도 있습니다 . 정규식을 사용할 필요가 없습니다.
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
참고 : 시작하기 전에 Array
사본을 만듭니다 . 클래스가 제거 될 때 업데이트 되는 라이브 classList
이므로 중요 합니다.classList
DomTokenList
단어 경계에서 정규 표현식을 나누는 \b
것이 가장 적합한 해결책은 아닙니다.
var prefix = "prefix";
var classes = el.className.split(" ").filter(function(c) {
return c.lastIndexOf(prefix, 0) !== 0;
});
el.className = classes.join(" ");
또는 jQuery 믹스 인으로 :
$.fn.removeClassPrefix = function(prefix) {
this.each(function(i, el) {
var classes = el.className.split(" ").filter(function(c) {
return c.lastIndexOf(prefix, 0) !== 0;
});
el.className = classes.join(" ");
});
return this;
};
클래스 이름이 'example'인 요소가 두 개 이상인 경우 'color-'클래스를 모두 제거하려면 다음을 수행하십시오. [using jquery]
var objs = $('html').find('.example');
for(index=0 ; index < obj1s.length ; index++){
objs[index].className = objs[index].className.replace(/col-[a-z1-9\-]*/,'');
}
정규식에 [a-z1-9-] *를 넣지 않으면 이름에 숫자 나 '-'가있는 클래스는 제거되지 않습니다.
마지막 설정 색상 만 제거하면 다음이 적합 할 수 있습니다.
내 상황에서 클릭 이벤트의 body 태그에 색상 클래스를 추가하고 마지막으로 설정된 색상을 제거해야했습니다. 이 경우 현재 색을 저장 한 다음 데이터 태그를 찾아 마지막으로 설정된 색을 제거하십시오.
암호:
var colorID = 'Whatever your new color is';
var bodyTag = $('body');
var prevColor = bodyTag.data('currentColor'); // get current color
bodyTag.removeClass(prevColor);
bodyTag.addClass(colorID);
bodyTag.data('currentColor',colorID); // set the new color as current
정확히 당신이 필요로하는 것은 아니지만 나에게 이것은 이것이 내가 본 첫 번째 질문이었습니다. 그래서 누군가를 도울 수 있도록 솔루션을 공유 할 것이라고 생각했습니다.
로 시작하는 클래스를 제거하는 일반 함수 begin
:
function removeClassStartingWith(node, begin) {
node.removeClass (function (index, className) {
return (className.match ( new RegExp("\\b"+begin+"\\S+", "g") ) || []).join(' ');
});
}
http://jsfiddle.net/xa9xS/2900/
var begin = 'color-';
function removeClassStartingWith(node, begin) {
node.removeClass (function (index, className) {
return (className.match ( new RegExp("\\b"+begin+"\\S+", "g") ) || []).join(' ');
});
}
removeClassStartingWith($('#hello'), 'color-');
console.log($("#hello")[0].className);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="hello" class="color-red color-brown foo bar"></div>
참고 URL : https://stackoverflow.com/questions/2644299/jquery-removeclass-wildcard
'Programming' 카테고리의 다른 글
파이썬 모듈 / 패키지를 작성하는 방법? (0) | 2020.03.01 |
---|---|
C # 콘솔 응용 프로그램이 자동으로 닫히지 않게하는 방법은 무엇입니까? (0) | 2020.03.01 |
Mobile Safari에서 전화 번호 연결을 비활성화하는 방법은 무엇입니까? (0) | 2020.03.01 |
내 웹 사이트에서 Adblock을 감지하는 방법은 무엇입니까? (0) | 2020.03.01 |
JavaScript에서 증가 (“++”) 및 감소 (“-”) 연산자를 피해야하는 이유는 무엇입니까? (0) | 2020.03.01 |