2016-06-14 6 views
1

내가 함수 만들기 위해 노력하고 있습니다와 클래스의 CSS 값을 인쇄 :읽기 및 순수 자바 스크립트

  • 가 특정 데이터 요소와 요소를 그랩을, 즉 "데이터 findDeclaration = 요소"
  • 이 요소에서
  • 는, 클래스 그것은이 클래스에 또 다른 특정 데이터 요소 (즉, 데이터 writeDeclaration = "요소") 모든 클래스 '규칙/값 내부
  • 표시를 임명 모든 CSS 값을 읽어
  • 읽습니다.

    HTML :

    <span class="slap0" data-finddeclaration="element">The great white fox</span> 
        <div class="description" data-writedeclaration="element"> 
    
        </div> 
    
        <span class="slap1" data-finddeclaration="element">The great white fox</span> 
        <div class="description" data-writedeclaration="element"> 
    
        </div> 
    
        <span class="slap2" data-finddeclaration="element">The great white fox</span> 
        <div class="description" data-writedeclaration="element"> 
    
        </div> 
    
        <span class="slap3" data-finddeclaration="element">The great white fox</span> 
        <div class="description" data-writedeclaration="element"> 
    
        </div> 
    

    JS :

    function readOutCssRules() { 
    var dataElement = document.querySelectorAll('[data-finddeclaration="element"]'); 
    var classRules = document.styleSheets[0].rules || document.styleSheets[0].cssRules; 
    var writeDataElement = document.querySelectorAll('[data-writedeclaration="element"]'); 
    
    for (var i = 0; i < dataElement.length; i++) { 
        dataElement[i].className; 
        if (classRules[i].selectorText == "." + dataElement[i].className) { 
         console.log(classRules[i].cssText); 
    
         writeDataElement[i].innerHTML = classRules[i].cssText; 
        } 
    } 
    
    
    } 
    readOutCssRules(); 
    

    그러나 예상대로 기능이 작동하지 않는 내가 지금까지 나는 여기 어디에

입니다. 아이디어가 있으십니까? 미리 감사드립니다.

+1

을 받고? –

+0

클래스의 내용을 가져 오지만 html 구조에 요소를 더 추가하면 해당 요소가 표시되지 않습니다. 게다가, 해당 div 안에 올바르게 표시된 클래스 이름이 아닌 규칙을 볼 필요가 있습니다. jQuery를 사용할 수 없습니다. 그렇지 않으면 문제가 많지 않을 것입니다. – Sidius

+0

CSS == 클래스 인 이유는 무엇입니까? – HudsonPH

답변

1

코드가 작동 중입니다.

당신은 루프의 한 줄을 제거해야합니다 :

for (var i = 0; i < dataElement.length; i++) { 
    //dataElement[i].className; --> remove this 
    if (classRules[i].selectorText == "." + dataElement[i].className) { 
     console.log(classRules[i].cssText); 

     writeDataElement[i].innerHTML = classRules[i].cssText; 
    } 
} 

을 그건 당신이 this 바이올린에서 볼 수있는대로, 작동 변경 후.

+0

슬프게도 ... CSS는 클래스가있는 경우에만 표시되며 더 많은 요소를 추가하면 더 새로운 규칙이 전혀 표시되지 않습니다. – Sidius

+0

달성하려는 것을 설명해 주시겠습니까? – Ygalbel

+0

이 함수가 호출되고 HTML에서 태그 data-finddeclaration = "element"를 검색합니다. 이 요소를 만날 때마다이 요소에 속한 클래스를 읽습니다. 수업을 통해 규칙/가치를 습득합니다. 그런 다음 data-writedeclaration = "element"를 사용하여 클래스를 표시하지 않고 대괄호 안에 규칙 만 게시합니다. – Sidius

1

확인이

https://jsfiddle.net/g6tu77mg/1/

var element = classRules[i].cssText 
var css= element.substring(element.lastIndexOf("{")+1,element.lastIndexOf("}")); 
writeDataElement[i].innerHTML = css; 

출력 : 브라우저 콘솔에서 어떤 오류를

The great white fox 
color: blue; 
The great white fox 
color: red; 
The great white fox 
color: yellow; 
+0

구현되었지만 발생하는 문제는 다음과 같습니다. 실제 CSS 스타일 시트에 리셋 규칙 및 기타 모든 요소가 포함되어 있으면 루프 길이로 클래스를 찾을 수 없습니다. 이미 접하게 된 또 다른 문제점은 클래스가 중복되면 표시되지 않는다는 것입니다. 노력에 감사 드리며, 게시 한 내용을 사용하여 작업하려고합니다. – Sidius

+0

이 경우 모든 유형에 대해 유효성을 검사해야합니다./ – HudsonPH

+0

그 자체를 두려워했습니다 ... 제가 누락 된 것이 있었으면합니다. 그러나 귀하의 의견에 진심으로 감사드립니다. – Sidius

관련 문제