2016-11-30 36 views
1

私はいくつかのポリマー成分を持っています。接頭辞で始まるすべての要素のCSSセレクタ

<ps-el-one/> 
<ps-el-two/> 
<ps-el-three/> 
<ps-el-four/> 

「ps-」で始まるすべての要素をCSSセレクタまたはjavaScriptで照会できるようにしたいと考えています。

私は以下の解決策を取り上げましたが、もっと効率的なものがあるのでしょうか?

var allElementsOnPage = document.querySelectorAll('*'); 
var res = []; 
for (var index in allElementsOnPage) { 
    var el = allElementsOnPage[index]; 
    if (el && el.tagName && el.tagName.substr(0, 3) == 'PS-') { 
    res.push(el); 
    } 
} 

このソリューションは非常に非効率的です。

+0

これはあなたに役立つことができhttps://www.polymer-project.org/1.0/docs/devguide/styling – Geeky

+0

すべての4名のホワイトリスト、およびそれぞれのループは明らかに、より多くのことを行っていますフルdocの繰り返しよりもパフォーマンスが良い – dandavis

答えて

0

私は任意の要素セレクタを認識していないんだけど、それは(IE7 +でサポートされている)CSS3の属性とクラスのサブストリングマッチングセレクタで可能である:これはあなたが望むものである場合

[class^="tocolor-"], [attr*=" tocolor-"] { 
    color:red 
} 

わかりませんおそらく、同じことを達成する別の方法を提供します。

0

チェックこのhere

<input name="man-news"> 
<input name="milkman"> 
<input name="letterman2"> 
<input name="newmilk"> 

<script> 
$("input[name*='man']").val("has man in it!"); 
</script> 
0

ただ、自然の中で共通するすべての要素にクラスを与えます。そして、実行します。

HTML

// for all elements together 
.ps { /* css for all elements together */ }  

// for individual elements 
.ps:nth-of-type(1) { /* css for 1st ele */ } 
.ps:nth-of-type(2) { /* css for 2nd ele */ } 
.ps:nth-of-type(3) { /* css for 3rd ele */ } 
.ps:nth-of-type(4) { /* css for 4th ele */ } 

JSが

// for all elements together 
var ps = document.querySelectorAll('.ps'); 

// for individual elements 
var ps1 = document.querySelectorAll('.ps')[0]; 
var ps2 = document.querySelectorAll('.ps')[1]; 
var ps3 = document.querySelectorAll('.ps')[2]; 
var ps4 = document.querySelectorAll('.ps')[3]; 
+0

クラスを与える場合は、部分文字列クラスセレクタを使用することができます。 – Yaser

+0

@ YaserAdelMehraban。いいえ!最初に要素名を異なるようにしてクラス名を変えてから、複雑な部分文字列関数を使ってそれらをすべてフェッチしてみましょう。そして、異なる成分に異なるタグ名を持つことがポリマーの要件です。あなたが私に-1を与えたら、それを取り除いてください。多分あなたは私を誤解したかもしれません。 –

0

あなたの代わりにこのようなものを使用することができます

<ps-el-one class="ps"/> 
<ps-el-two class="ps"/> 
<ps-el-three class="ps"/> 
<ps-el-four class="ps"/> 

CSS querySelectorAll

function myFunction() { 
    var x = document.getElementsByTagName("*"); 
    var res = []; 
    for(var i = 0; i < x.length; i++) { 

    if(x[i].tagName.indexOf('PS-') == 0) { 

     res.push(x[i]); 
    } 
    } 

} 
関連する問題