Прототип функции различных элементов id одного и того же класса

Я делаю этот прототип скрипта для работы:

function removing () {
*var ids = $$('.class').collect(function(el) { return el.id; });* //array of ids, not used by now
var data = $$('.class').pluck('innerHTML');
var wanted_count = 10;
var output = cutHtmlString(data, wanted_count);
$$('.class').invoke('replace', output + '...');
}

на этой разметке:

<div class="class" id="id1">content 1</div>
<div class="class" id="id2>content 2</div>
<div class="class" id="id3>content 3</div>

cutHtmlString — это функция, которая вырезает html-строки, сохраняя теги, и я хочу применить ее к каждому другому содержимому div. Я создаю переменную «данные» (с помощью innerHTML) из общего $$(.class), а затем выполняю вырезание по количеству слов (var Wanted_Count) в «выходную» переменную.
В конце я заменяю исходный элемент (на снова $$.class) с его новым вырезанным содержимым.

Все работает отлично, за исключением одной проблемы: использование только $$(class) приводит к учитыванию и замене только содержимого первого элемента ко всем остальным.
Наверное, мне тоже нужно идентифицировать элементы по идентификаторам..поэтому я добавил комментируемую функцию (собрать), но я не знаю, как присоединиться к моей цели..

К настоящему времени я получил только эти результаты:

это содержимое первого div 'class'...(cut)
это содержимое первого div 'class'...
это содержимое первого 'class' ' див...

пока я хочу получить:

это содержимое первого "класса" div...
это содержимое второго "класса" div...
это содержимое третьего "класса" div...

спасибо, ребята, и признательность этому замечательному сообществу в целом


person serytankian    schedule 08.05.2011    source источник


Ответы (2)


Я считаю, что вы смешиваете работу над набором элементов с работой над одним элементом. Прошло некоторое время с тех пор, как я был в Prototype, но пытались ли вы работать очень индивидуально, чтобы вывод ограничивался элементом, который вы заменяете:

function removing () {
  var data, output, wanted_count = 10;

  $$('.class').each(function(element){
    output = cutHtmlString(element.innerHTML, wanted_count);
    element.replace(output + '...');
  });
}
person Zach Dennis    schedule 08.05.2011

Invoke работает только в том случае, если вы добавляете одни и те же переменные к каждому элементу. Вам нужно использовать each. Также я думаю, что вы хотите использовать update, а не replace.

попробуй это.

function removing() {
  $$('.class').each(function(el){
    var output = cutHtmlString(el.innerHTML, 10);
    el.update(output + '...');
  });
}
person herostwist    schedule 09.05.2011