2011-09-24 7 views
8

html 파일에서 사용되는 클래스 목록이 필요합니다. HTML 파일에 클래스 목록을 가져올 수있는 도구가 있습니까?HTML 파일에서 CSS 클래스 사용 목록을 가져 오는 방법은 무엇입니까?

+0

당신은 또한 클래스 이름, 또는 값 단지리스트가 필요하십니까 ('ng- *'각 클래스를 무시)? – Milan

+0

이 도움이 될 수 있습니다. http://html5boilerplate.com/ – sandeep

+3

@sandeep 어떻게하면 도움이 될까요? – Bojangles

답변

6

정상적으로 작동하며 jquery가 필요하지 않습니다.

var used = []; 
var elements = null; 

//get all elements 
if (typeof document.getElementsByTagName != 'undefined') { 
    elements = document.getElementsByTagName('*'); 
} 

if (!elements || !elements.length) { 
    elements = document.all; // ie5 
} 

//loop over all element 
for (var i = 0; i < elements.length; i++){ 

    //loop over element's classes 
    var classes = elements[i].className.split(' '); 
    for (var j = 0; j < classes.length; j++) { 

     var name = classes[j]; 

     //add if not exists 
     if (name.length > 0 && used.indexOf(name) === -1) { 
      used.push(name); 
     } 
    } 
} 

alert(used.join(' ')); 

더 기능적 접근

var elements = document.getElementsByTagName('*'); 

var unique = function (list, x) { 
    if (x != "" && list.indexOf(x) === -1) { 
     list.push(x); 
    } 
    return list; 
}; 

var trim = function (x) { return x.trim(); }; 

var classes = [].reduce.call(elements, function (acc, e) { 
    return e.className.split(' ').map(trim).reduce(unique, acc); 
}, []); 
+0

Firefox에서 작동하지 않습니다 :'document.all'이 정의되지 않았습니다. –

+0

@RobW가 업데이트되었습니다. 감사합니다 –

+0

는 "elements [i] .className.split ('')"로 실패하기 때문에 약간 업데이트해야했습니다. - 함수가 아닙니다. 여기에 업데이트 된 코드가 있습니다 - https://jsfiddle.net/dqad4n90/ – shershen

0

더스트 미 셀렉터 (Dust Me Selectors)를 살펴보십시오.

정확하게 찾고자하는 것이 아니며 사용하지 않는 선택자 목록을 보여줍니다. 그러나, 당신이 제공하는 목록의 반대를 사용할 수 있다고 상상해보십시오. 이 페이지에 jQuery를 가지고있는 경우에 http://www.sitepoint.com/dustmeselectors/

+0

그게 내 문제를 해결하지 못할 것이라는 것을 알고 있습니다. – KuldipMCA

+0

좋은 확장 기능처럼 보이지만 FF3.5 지원에 대해서만 이야기합니다! 우리는 현재 Firefox 6.0 (2 개의 버그 수정 릴리즈가있는 4.0)에 있습니다. – Bojangles

+0

@KuldipMCA 그럼 거기에 당신을 데려 갈 것입니다. 자신의 노력 중 일부를 문제에 넣으십시오. – Bojangles

6

는,이 코드를 실행 : 변수 classArray가 HTML 페이지에 지정된 모든 클래스를 포함

var classArray = []; 
$('*').each(function(){if(this.className!=""){classArray.push(this.className)}}) 

여기

는 링크입니다.

+0

+1 멋진 솔루션 @MisterGreen. 그리고 오신 것을 환영합니다! –

+1

당신은 당신의 결과에 중복을 가질 것입니다. –

+0

태그 이름과 ID가 목록에 있습니다. – shershen

0

나는이 오래된 질문이다 알지만, 그래서 더 많은 사람들이 여기에서도 얻을 수 의심 여기에 구글을 통해 얻었다. querySelectorAll 및 classList (수단 브라우저 지원이 문제가 될 수있다 : IE10 for classListIE8 for querySelectorAll)를 사용

최단 방법과 중복와 같다 :

var classes = 0, 
elements = document.querySelectorAll('*'); 

for (var i = 0; i < elements.length; i++) { 
    classes = classes + elements[i].classList.length;   
} 

I made a jsFiddle을 classList위한 대체하여 (어느 classList을 사용하지 않는 경우 모든 요소, 모든 클래스 및 모든 요소를 ​​클래스로 계산하는 브라우저 지원이 가장 낮습니다.

고유 한 감지 기능을 추가하지는 않았지만 언젠가는 얻을 수 있습니다. 콘솔에서

+0

고마워요! 최근 솔루션에 만족합니다. Plain vanilla JavaScript -> jQuery가 필요하지 않습니다. –

0

신속리스트 클래스는

(global => { 
 
    // get all elements 
 
    const elements = document.getElementsByTagName('*'); 
 
    // add only unique classes 
 
    const unique = (list, x) => { 
 
     x != '' && list.indexOf(x) === -1 && x.indexOf('ng-') !== 0 && list.push(x);      
 
     return list; 
 
    }; 
 
    // trim 
 
    const trim = (x) => x.trim(); 
 
    // add to variable 
 
    global.allClasses = [].reduce.call(elements, (acc, e) => e.className.split(' ').map(trim).reduce(unique, acc), []).sort(); 
 
    console.log(window.allClasses); 
 
})(window);

관련 문제