jQuery Соответствие строки Django Генерируемая строка - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть скрипт, который выделяет определенные блоки текста на странице, сгенерированной Django. Сценарий работает нормально, пока блок текста не содержит апостроф. Это не будет соответствовать в этом случае. Я пробовал различные комбинации фильтров, экранирование и т. Д. c. но не могу заставить его работать. Ниже мой код.

jQuery в шаблоне:

<script>
    $(document).ready(function(){
        // Displays highlights if any exist
        {% for highlight in agenda.highlights.all %}
            $("div.card-body div.mb-3:contains('{{agenda.agenda_text|hl_slice:highlight }}')" ).css( "background-color", "#FFFF00" ).attr("id", "{{ highlight.id }}");
        {% endfor %}
    });
</script>

Django Пользовательский фильтр "hl_slice"

@register.filter
@stringfilter
def hl_slice(agenda_text, hl):
    """
    Returns the highlighted portion of the agenda text.
    """
    try:
        hl_text = strip_tags(agenda_text[hl.start:hl.end])
        return hl_text
    except (ValueError, TypeError):
        return hl  # Fail silently.

Текстовые блоки в шаблоне (генерирует HTML элементов, содержащих текст)

{{ agenda.agenda_text|safe }}

Вот пример текста, который разрывает соответствие:

"K. 20-378. Уведомление городских управляющих и помощников городского управляющего о выполнении соглашений с профессиональными консультантами и поправок к соглашению, а также опубликованных c строительных контрактов, не подпадающих под действие Закона о конкурсных торгах, со стоимостью контракта в размере менее $ 25 000 "

Если я уберу апострофы, текст будет совпадать, поэтому я знаю, что это как-то связано с тем, как javascript интерпретирует апостроф по сравнению с тем, что HTML и Django делают. Кто-нибудь знает, как заставить их сравнивать яблоки с яблоками?

...