Как запустить javascript через цикл for?
Я создал поле поиска и выделения для объектов моей модели. Страница принимает текстовый ввод и фильтрует объекты как Documents.objects.filter(content)
Я использую функции read more и highlight, чтобы выделить введенное слово и показать часть длинного содержимого. Но я не могу нажать на некоторые read-mores в строке. Например, я не могу нажать на 1-ю и 3-ю строку (возвращается javascript:void(0), но нет никакого действия), но я могу нажать на другие строки.
Как я могу это исправить?
<div id="highlights" >
<div class="row">
<div class="col-md-12" >
<div class="box">
<p class="countParawords-{{ forloop.counter0 }}" id="paragraph-{{ forloop.counter0 }}">
{{ document.content }}
</p>
</div>
</div>
<input id="typed-text-{{ forloop.counter0 }}" type="text" class="hidden_input" placeholder="Type text" value="{{ key_word }}">
</div>
</div>
<script>
{% for doc in documents %}
var opar = document.getElementById('paragraph-{{ forloop.counter0 }}').innerHTML;
$(document).ready(function() {
var maxLength = 300;
var moretxt = "...Read More";
var lesstxt = "...Read Less";
$(".countParawords-{{ forloop.counter0 }}").each(function() {
if(opar) {
var paragraph = (document.getElementById('paragraph-{{ forloop.counter0 }}'));
var search = document.getElementById('typed-text-{{ forloop.counter0 }}').value;
search = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
var re = new RegExp(search, 'g');
if (search.length > 0)
paragraph.innerHTML = opar.replace(re, `<span style="background: #cead00">$&</span>`);
}
else{
console.log("No data")
}
var myStr = paragraph.innerHTML
if ($.trim(myStr).length > maxLength) {
var newStr = myStr.substring(0, maxLength);
var removedStr = myStr.substring(maxLength, $.trim(myStr).length);
$(this).empty().html(newStr);
$(this).append('<span class="more-text">' + removedStr + '</span>');
$(this).append(' <a href="javascript:void(0);" class="read-more more">' + moretxt + '</a>');
}
});
$(".read-more").click(function() {
if($(this).hasClass("more")){
$(this).removeClass("more");
$(this).text(lesstxt);
$(this).siblings(".more-text").show();
}
else {
$(this).addClass("more");
$(this).text(moretxt);
$(this).siblings(".more-text").hide();
}
});
});
{% endfor %}
</script>