Прототип: удалить текст и создать класс из его значения - PullRequest
1 голос
/ 27 апреля 2011

Я хочу удалить из текста опции элементы в двойных скобках, взять внутренний текст внутри двойных скобок и создать класс в каждой опции со значением.Как бы вы сделали это в Prototype?

<select id="attribute969">     
<option value="">Choose an Option...</option>
<option value="340">White [[white]]</option>
<option value="341">White [[white]]</option>
<option value="342">Blue PMS 801 [[pms801]]</option>
<option value="343">Blue PMS 801 [[pms801]]</option>
</select>

Пример ниже:

<select id="attribute969">     
<option value="">Choose an Option...</option>
<option value="340" class="white">White</option>
<option value="341" class="white">White</option>
<option value="342" class="pms801">Blue PMS 801</option>
<option value="343" class="pms801">Blue PMS 801</option>
</select>

Ответы [ 3 ]

1 голос
/ 27 апреля 2011
(function() {
    var bracketregex = /\[\[(.*)\]\]/m,
        oBracks;
    $$("#attribute969 option").each(function(option) {
        oBracks = bracketregex.exec(option.innerHTML);
        if (oBracks) {
            option.addClassName(oBracks[1]);
            option.innerHTML = option.innerHTML.gsub(oBracks[0],"")
        }
    })
}())

Регулярному выражению может потребоваться некоторая работа, но это должно делать то, что вы хотите.

0 голосов
/ 27 апреля 2011
//Here is my brief and killer trial, the way to do it with Prototype's Power!
$A($('attribute969').options).each(function(s,index)
{
   $(s).toggleClassName($(s).innerHTML.gsub(/.*\[{2}/,'').gsub(/\]{2}.*/,''));
   $(s).innerHTML = $(s).innerHTML.gsub(/\[{2}.*/,'');
});

Проверьте этот фрагмент кода в действии здесь ...

0 голосов
/ 27 апреля 2011

Не проверено, но вы поняли ...

$('attributes969').childElements().each(
 function(option) {
  if (/\[\[(.*?)\]\]/.test(option.innerHTML)) {
   option.addClassName(option.match(/\[\[(.*?)\]\]/)[1]);
   option.update(option.innerHTML.replace(/\[\[(.*?)\]\]/, ''));
  }
 }
);
...