2016-06-14 11 views
1

私は機能、作成しようとしていますと、クラスのCSS値を印刷:読むと、純粋なJavascriptの

  • は、特定のデータ要素を持つ要素をグラブを、すなわち「データ・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ループで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

関連する問題