2016-10-12 3 views
1

Это мой CSS путь:Прототип Js Multiple Selector

#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

Во-первых, почему вы используете прототип? У него не было фиксации почти за год ... и это время в 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"); 

Я использовал writeAttribute() вместо setAttribute(), как это работает во всех браузерах PrototypeJS поддерживает

Есть несколько других способов сделать эта работа также

$('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 и вашего желаемого поведения. Если вы собираетесь нацелиться только на один элемент, то использование поиска id с down(), вероятно, будет работать лучше. Если вы собираетесь иметь несколько дочерних элементов в элементе #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

Я получил это в firebug: TypeError: $$ (...). SetAttribute не является функцией var BundleControl = Class.create(); –

+0

Сделайте 'console.log (e)', чтобы посмотреть, что такое 'e', я не знаком с прототипом btw – Fourat

Смежные вопросы