2016-10-12 6 views
1

これは私のCSSのパスです:プロトタイプのJS複数のセレクター

#product_composite_configure .entry-edit .buttons-set.a-right .scalable 

私はプロトタイプのJSを使用して、これを選択するにはどうすればよいですか?このアイテムに新しい属性を追加したいと思います。

これは動作しません:

<script type="text/javascript"> 
    $$('#product_composite_configure .entry-edit .buttons-set.a-right .scalable').setAttribute("test","test"); 
</script> 

Thxを

[UPDATE]

これはあまりにも動作しません:

$$('div#product_composite_configure div.entry-edit div.buttons-set button.scalable').setAttribute("test","test"); 
+0

まず、プロトタイプを使用している理由は何ですか?それはほぼ1年でコミットしていない...それはJavaScriptの土地で長い時間です... –

+0

私はする必要があります:(その私の選択 –

+0

@ JaredSmith多分それは改善するために最適に達した? -P – Bergi

答えて

0

$$()セレクタは、選択した要素の配列を返します。したがって、配列またはユーザーに対して組み込みイテレータinvoke()を反復処理する必要があります。

例えば

$$('.css_class').invoke('writeAttribute','checked',true); 

したり、CSSセレクタ

$$('#product_composite_configure .entry-edit .buttons-set.a-right .scalable').invoke('writeAttribute',"test","test"); 

、それはすべてのブラウザのPrototypeJSに働くように私はwriteAttribute()の代わりsetAttribute()を使用させるためにいくつかの他の方法があります

をサポートしていますこの作品も同様です。

$('product_composite_configure').down('.entry-edit .buttons-set.a-right .scalable').writeAttribute('test','test'); 

$$('#product_composite_configure .entry-edit .buttons-set.a-right .scalable')[0].writeAttribute('test','test'); 

すべては、HTMLの構造と目的の動作によって異なります。 1つの要素だけを対象にする場合は、down()でidルックアップを使用すると、おそらくよりうまくいくでしょう。 #product_composite_configure要素内に複数の子要素を設定する場合は、の子要素をinvoke()とすると、スクリプトを書き直すことなく新しい要素が影響を受けることになります。

+0

Thx:私たちとこの情報を共有しています:) –

0

なぜ物事を複雑に?これを試してください:

var selectors = ["#product_composite_configure",".entry-edit",".buttons-set",".a-right",".scalable"]; 
selectors.forEach(function(e, i) { 
    $$(e).setAttribute("test","test"); 
}); 
+0

これはファイヤーバグにあります:TypeError:$$(...)。setAttributeは関数ではありません var BundleControl = Class.create(); –

+0

代わりに 'console.log(e)'を実行して 'e'の内容を確認してください。私はプロトタイプbtwに慣れていません – Fourat

関連する問題