Прототип Js Multiple Selector

Это мой css-путь:

#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>

Спасибо

[ОБНОВИТЬ]

Это тоже не работает:

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

javascript,prototypejs,

1

Ответов: 2


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

Зачем усложнять вещи? Попробуй это:

var selectors = ["#product_composite_configure",".entry-edit",".buttons-set",".a-right",".scalable"];
selectors.forEach(function(e, i) {
   $$(e).setAttribute("test","test");
});
JavaScript, prototypejs,
Похожие вопросы