#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 '...');
});
}