Больше и меньше текста переключать данные, полученные через ответ jquery ajax с другой страницы

Я создаю небольшую функцию переключения большего и меньшего количества текста в jquery для данных, которые извлекаются по одному и добавляются к контейнеру div со страницы getData при нажатии кнопки с использованием ajax ... Проблема в том, когда впервые кнопка данные, по которым щелкнули, извлекаются, все больше и меньше текстовых функций работает нормально, но когда кнопка нажимается второй раз, а данные извлекаются второй раз и добавляются к div, тогда показывать больше и меньше текста работает с текущими извлеченными данными, но не со всеми ранее извлеченными данными ... кто-нибудь, пожалуйста, помогите мне в этом ... Спасибо

recordsDisplay.html

<div id = "container">
</div>
<button id = "click">Click Me</button>

style.css:

a.morelink {
    color:red;
}
.morecontent span {
    display: none;

}

jquery:

var showChar = 150;
    var ellipsestext = "...";
    var moretext = "more";
    var lesstext = "less";
$('#click').click(function(){
    $.ajax({
        url : "getData.html",
        method : "GET",
        success : function(response){
            $('#container').append(response);
            var mymore = $('#container').find('.more');
$(mymore).each(function() {

                var content = $(this).html();
                if (content.length > showChar) {

            var c = content.substr(0, showChar);
            var h = content.substr(showChar, content.length - showChar);

            var html = c + '<span class = "moreelipses">'+ellipsestext+'</span>&nbsp;<span class = "morecontent"><span>' + h + '</span>&nbsp;&nbsp;<a href = "" class = "morelink">'+moretext+'</a></span>';

                $(this).html(html);

                }

            });
            $(".morelink").click(function(){

        if ($(this).hasClass("less")) {
            $(this).removeClass("less");
            $(this).html(moretext);
        } else {
            $(this).addClass("less");
            $(this).html(lesstext);
        }
        $(this).parent().prev().toggle();
        $(this).prev().toggle();
        return false;
    });
}
        })

getData.html:

<h5 class = "more">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed faucibus, ligula ornare viverra sodales, magna erat semper ante, non placerat nulla lorem id orci. Praesent auctor ultrices sodales. Etiam vitae eros nisi. Morbi dictum, turpis at varius ornare, ante diam dignissim erat, a vulputate eros massa sit amet quam. Donec viverra pharetra odio, nec porta libero sagittis ac. Nam porta ornare feugiat. Maecenas </h3>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
48
1

Ответы 1

var showChar = 150;
    var ellipsestext = "...";
    var moretext = "more";
    var lesstext = "less";
      $('#click').click(function(){
       $.ajax({
          url : "getData.html",
          method : "GET",
          success : function(response){
            $('#container').append(response);
            var mymore = $('#container').find('.more');
            $(mymore).each(function() {
              var content = $(this).html();
              console.info(content);
              console.info(content.indexOf(ellipsestext) );
              if (content.length > showChar) {
                if (content.indexOf(ellipsestext) < 0){
                  var c = content.substr(0, showChar);
                  var h = content.substr(showChar, content.length - showChar);
                  var html = c + '<span class = "moreelipses">'+ellipsestext+'</span>&nbsp;<span class = "morecontent"><span>' + h + '</span>&nbsp;&nbsp;<a href = "" class = "morelink">'+moretext+'</a></span>';
                  $(this).html(html);
                }
              }
            });

          }
        });
      });
      $('body').on("click",".morelink",function(){
        if ($(this).hasClass("less")) {
          $(this).removeClass("less");
          $(this).html(moretext);
        } else {
          $(this).addClass("less");
          $(this).html(lesstext);
        }
        $(this).parent().prev().toggle();
        $(this).prev().toggle();
        return false;
      });

Вы пропустили условие после каждого получения новых данных, потому что уже добавленный html имеет формат более или менее, поэтому, если вы снова его отредактируете, он потеряет больше данных. поэтому я добавил условие, чтобы больше не редактировать старые данные

это просто при условии

if (content.indexOf(ellipsestext) < 0){

а также вам не нужно ставить $ ('. morelink'). click () внутри вызова ajax он сделает один даже несколько раз, поэтому лучше загружать его вне события, когда я даю и привязываю его к телу, чтобы он также работал с динамическим элементом

$('body').on("click",".morelink",function(){

Другие вопросы по теме