Как добавить несколько кнопок «Читать дальше» и «Читать меньше» через Javascript с помощью getElementsById или ClassName?

все. Недавно я работал над добавлением кнопок «Читать дальше» и «Читать меньше» с помощью Javascript. Я могу сделать это только один раз для одного конкретного элемента, выбрав его идентификатор. Но я хочу, чтобы это повторилось несколько раз для нескольких других подобных элементов. Я попытался сохранить идентификаторы или имена классов в переменной, а затем перебрать ее, но это не сработало. Не могли бы вы взглянуть на код Javascript и подсказать, как я могу добиться такой же функциональности для нескольких других элементов. Вот код для одного элемента, который работает нормально. Я хочу это для нескольких абзацев. Это HTML.

  <p style = "font-size:1.1em; margin-top:25px; margin-bottom:15px;">This is Lorem Ipsum. This is Lorem Ipsum. <span id = "dots">...</span> <span style = "display:none;" id = "more"> This is the hidden text. This is the hidden text. </span> 
 </p>
 <a id = "myBtn" style = "cursor:pointer; margin-bottom:1em; font-weight:bold;" onclick = "myFunction()">Show More</a>         

Это Javascript.

 function myFunction() {
  var dots = document.getElementById("dots");
  var moreText = document.getElementById("more");
  var btnText = document.getElementById("myBtn");

  if (dots.style.display === "none") {
    dots.style.display = "inline";
    btnText.innerHTML = "Read More"; 
    moreText.style.display = "none";
  } else {
    dots.style.display = "none";
    btnText.innerHTML = "Read Less"; 
    moreText.style.display = "inline";
  }
}

Теперь в этом случае myFunction () вызывается при нажатии кнопок «Читать дальше» или «Читать меньше». Текст с идентификатором «еще» скрыт, а точки представляют собой точки в конце видимого содержимого.

Теперь я хочу, чтобы это произошло для нескольких абзацев с одинаковыми идентификаторами или именами классов. Я пробовал использовать циклы для достижения этой цели, но получаю сообщение об ошибке «Неперехваченная ошибка myFunction не определена». Я считаю, что неправильно установил цикл.

Был бы признателен, если бы кто-нибудь мог помочь мне найти работоспособное решение этой проблемы. Заранее всем спасибо.

Поведение ключевого слова "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) для оценки ваших знаний,...
0
0
2 677
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете переключить класс, чтобы показать / скрыть промежутки, используя некоторый CSS, например:

document.querySelectorAll(".showmore").forEach(function (p) {
  p.querySelector("a").addEventListener("click", function () {
    p.classList.toggle("show");
    this.textContent = p.classList.contains("show") ? "Show Less" : "Show More";
  });
});
.showmore {
  font-size: 1.1em;
  margin-top: 1.5em;
}

.showmore .more, .showmore.show .dots {
  display: none
}

.showmore.show .more {
  display: inline
}

.showmore a {
  cursor: pointer;
  display: block;
  margin-top: 0.5em;
  margin-bottom: 1em;
  font-weight: bold;
}
<p class = "showmore">This is Lorem Ipsum. This is Lorem Ipsum. <span class = "dots">...</span><span class = "more"> This is the hidden text. This is the hidden text. </span>
  <a>Show More</a>
</p>

<p class = "showmore">And here is a second paragraph. <span class = "dots">...</span><span class = "more"> This is the hidden text. This is the hidden text. </span>
  <a>Show More</a>
</p>

Код сначала перебирает все абзацы, затем захватывает <a> внутри и назначает обработчик кликов.

Спасибо за ваше решение. Работает отлично. Я немного поправил его, так что даже если в абзаце больше одного элемента «a», он все равно работает. Мне очень нравится компактность вашего кода. Еще раз, спасибо.

Saurabh V 20.12.2018 03:41

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