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

#javascript #string #prototypejs #getelementbyid

#javascript #строка #prototypejs #getelementbyid

Вопрос:

Я заставляю этот прототип скрипта работать:

 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. Я создаю переменную ‘data’ (с помощью innerHTML) из general $ $ (.class), а затем я выполняю сокращение на количество слов (var wanted_count) в ‘output’ var.
В конце я заменяю исходный элемент (снова на $$.class) его новым вырезанным содержимым.

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

К настоящему моменту я добрался только до этих результатов:

это содержимое первого ‘class’ div…(вырезать)
это содержимое первого div ‘class’…
это содержимое первого div ‘class’…

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

это содержимое первого ‘class’ div…
это содержимое div второго «класса»…
это содержимое третьего ‘class’ div…

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

Ответ №1:

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

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

  $$('.class').each(function(element){
    output = cutHtmlString(element.innerHTML, wanted_count);
    element.replace(output   '...');
  });
}
  

Ответ №2:

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

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

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