여러 값이있는 Javascript 배열이 있습니다.
var filterClasses = ['col-sm-12', 'hidden-xs', 'hidden-sm', 'hidden-lg', 'hidden-md', 'active', 'btn-'];
DOM에서 모든 CSS 클래스를 가져 오는 함수가 있습니다. 하지만이 클래스를 새 배열에 추가해야하는지 확인하고 싶습니다. 그래서 나는 이것을 위해 indexOf를 사용할 수 있습니다.
return filterClasses.indexOf('col-sm-12');
true를 반환하므로이 클래스는 무시해야합니다.
하지만 지금은 btn-primary 클래스가 있습니다. 내 배열에서 볼 수 있듯이 나는 btn-
그것에 추가되었습니다. 단어가 포함 된 모든 클래스를 제외하고 싶습니다 btn-
. 어떻게해야합니까?
현재 기능 :
function setupShouldAddClass( cssClass, filterClasses )
{
// If the cssClass exists in the filterClasses then false
if ( filterClasses.indexOf(cssClass) > 0 )
{
return true;
}
filterClasses.forEach(function ( item )
{
if ( stringContains(item, cssClass) )
{
return true;
}
});
return false;
}
function stringContains( needle, haystack )
{
return (haystack.indexOf(needle) !== -1);
}
명령형 코드를 사용하는 대신 정규식을 사용하여 문제를 해결할 수 있습니다 .
var classBlackListRegExp = /(col-sm-12|hidden-xs|hidden-sm|hidden-lg|hidden-md|active|^btn-.+)/i;
var result = classBlackListRegExp.test("btn-whatever");
console.log(result);
^btn-.+
부품을 확인하십시오 . 로 시작하는 모든 항목"btn-"
과 일치 합니다.
귀하의 시나리오가 정규식의 이상적인 사용 사례라고 생각합니다!
OP는 다음과 같이 말했습니다.
내가 궁금한 것은 100 개 이상의 클래스를 추가하면 줄 바꿈을 어떻게 처리합니까?
블랙리스트 문자열의 전체 배열을 결합하고 RegExp
다음과 같이 객체를 만들 수 있습니다.
// I use a templated string and String.prototype.join
// to create a regular expression from a given array:
var classBlackListRegExp = new RegExp(`(${[
'col-sm-12',
'hidden-xs',
'hidden-sm',
'hidden-lg',
'hidden-md',
'active',
'^btn-.+'
].join("|")})`, "i");
var result = classBlackListRegExp.test("btn-whatever");
console.log(result);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다