Поменять местами тексты в html

Мне нужно изменить видимость двух текстов, но мне не нужна кнопка переключения, а только один значок, который при нажатии скрывает текст1 и показывает текст2 и возвращается обратно при повторном нажатии.

Я использую:

<span onclick = "document.getElementById('text1').innerHTML = (this.innerHTML == document.getElementById('text1').innerHTML) ? document.getElementById('text2').innerHTML : document.getElementById('text1').innerHTML"><i class = "fa fa-comments" aria-hidden = "true"></i></span>and

<div class = "content">
  <div id = "text1">
    <h1>Welcome</h1>
    <p>English text</p>
  </div>
  <div id = "text2">
    <h1>Välkommen</h1>
    <p>Swedish text</p>
  </div>
</div>

Обновлено: ответ Мигеля Г решает эту проблему. Тем не менее, я все еще пытаюсь выяснить, как изменить текст в других разделах по всей странице.

«всего один значок, который при нажатии меняет текст1 на текст2 и возвращается обратно при повторном нажатии», но это «кнопка переключения».

David Thomas 17.04.2023 19:04

Какой конкретно вопрос у вас есть? Вы получаете какие-либо ошибки?

Scott Marcus 17.04.2023 19:11

извините, я думал, что кнопка переключения похожа на переключатель из стороны в сторону. Я использую только простой значок. Но код не меняет местами тексты, они просто появляются оба, и значок ничего не делает.

art vanderlay 17.04.2023 19:26
Поведение ключевого слова "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
3
136
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Хорошо, я сделал много изменений в вашем коде, я не знаю, было ли это именно то, что вы ожидали, но вот оно.
Чтобы добиться желаемого поведения отображения содержимого, соответствующего каждому тексту, когда пользователь щелкает соответствующий элемент, вам потребуется внести некоторые изменения в код HTML и добавить JavaScript.
В этом примере я добавил код для переключения отображения текста, соответствующего нажатой кнопке. Если текст виден, он будет скрыт, и наоборот. Кроме того, я добавил цикл для скрытия всех текстов, кроме текста, соответствующего текущей нажатой кнопке. Благодаря этим изменениям вы можете нажимать кнопки, чтобы отображать и скрывать соответствующий контент.

<style>
  .text {
    display: none;
  }
</style>

<!-- add a class to each button -->
<span class = "btn" data-target = "#text1"><i class = "fa fa-comments" aria-hidden = "true"></i>English</span>
<span class = "btn" data-target = "#text2"><i class = "fa fa-comments" aria-hidden = "true"></i>Swedish</span>

<div class = "content">
  <div id = "text1" class = "text">
    <h1>Welcome</h1>
  </div>
  <div id = "text2" class = "text">
    <h1>Välkommen</h1>
  </div>
</div>

<!-- JavaScript code -->
<script>
  const buttons = document.querySelectorAll('.btn');
  const texts = document.querySelectorAll('.text');

  buttons.forEach(button => {
    let isTextVisible = false;
    button.addEventListener('click', () => {
      // Get button target
      const target = button.getAttribute('data-target');
      const text = document.querySelector(target);
      // Hides all texts except the current text
      texts.forEach(t => {
        if (t !== text) {
          t.style.display = 'none';
        }
      });
      // Shows or hides the text corresponding to the clicked button
      if (isTextVisible) {
        text.style.display = 'none';
        isTextVisible = false;
      } else {
        text.style.display = 'block';
        isTextVisible = true;
      }
    });
  });
</script>

спасибо, Ширли, не лучшая идея без JS? Я надеялся, что это можно сделать просто в HTML.

art vanderlay 17.04.2023 19:48

@artvanderlay в вашем HTML есть огромная строка JSonclick, это не «просто HTML». Вы можете поместить тег <script> так же, как и любой другой тег.

Dimava 17.04.2023 20:39

хорошо, но я понимаю, что решение Ширли имеет две кнопки, и я стараюсь избегать этого. Я ошибочно назвал это переключением, но я стараюсь, чтобы один элемент не менялся по внешнему виду.

art vanderlay 17.04.2023 21:03
Ответ принят как подходящий

Обновлено: Хорошо, я думаю, что знаю, о чем вы просите. Вы хотите иметь возможность щелкнуть кнопку или что-то еще, чтобы переключить внутренний HTML этих двух div. Вы можете сделать это следующим образом:

<button type = "button" onclick = "toggle()">Click Me!</button
<div class = "content" style = "display: inline;">
  <div id = "text1">
    <h1>Welcome</h1>
    <p>English text</p>
  </div>
  <div id = "text2" style = "display: none;">
    <h1>Välkommen</h1>
    <p>Swedish text</p>
  </div>
</div>

Для вашего HTML вы можете поместить свойство onclick непосредственно в верхний div или вы можете поместить его в отдельную кнопку. Это зависит от вас. Для этого я добавил кнопку поверх div, чтобы вы могли переключаться между двумя вариантами. Я также добавил некоторые начальные стили в div, чтобы показать, что происходит.

  const toggle = () => {
  
    let el1 = document.getElementById("text1");
    let el2 = document.getElementById("text2");

    el1.style.display.includes('none') ? el1.style.display = 'inline' : el1.style.display = 'none';
    el2.style.display.includes('none') ? el2.style.display = 'inline' : el2.style.display = 'none';
  }

Это функция JavaScript, которая поменяет местами ваши элементы div. По сути, сейчас мы просто проверяем стиль каждого div, и если он виден, мы делаем его невидимым, а если он не виден, мы делаем его видимым. Используя свойство none, мы гарантируем, что они появятся в одном и том же месте.

Вы можете поместить эту функцию в тег script, и она должна работать! Дайте мне знать, как это происходит.

Спасибо, Мигель, это почти то, что мне нужно, но вместо того, чтобы менять местами текст 1 и 2, я хочу, чтобы они заменяли друг друга: при загрузке виден только текст1, при нажатии виден только текст2 и в том же положении, что и текст1. Тексты являются переводами, и я хочу, чтобы они переключались только при нажатии кнопки/значка, чтобы избежать полной перезагрузки страницы и изображения.

art vanderlay 18.04.2023 09:25

... чтобы быть видимым индивидуально.

art vanderlay 18.04.2023 09:48

Понятно! Тогда я, должно быть, неправильно понял вопрос. Дайте мне одну минуту, и я посмотрю, смогу ли я отредактировать свой ответ для вас.

Miguel G 18.04.2023 18:04

Хорошо, я отредактировал свой ответ, чтобы отразить то, что вы сказали. Позвольте мне знать, если это помогает

Miguel G 18.04.2023 18:47

Работает очарование. Большое спасибо, Мигель!

art vanderlay 19.04.2023 08:55

К сожалению, я не могу голосовать. Новичок.

art vanderlay 19.04.2023 08:56

Мигель, еще один вопрос: у меня есть разные разделы текста, я добавил идентификаторы div, но текст не меняется. Что мне нужно сделать, чтобы изменить текст на всей странице?

art vanderlay 19.04.2023 09:34

Вы должны иметь возможность «выбрать ответ». Кроме того, если ваш текст находится в div с идентификаторами «text1» и «text2», он должен работать. Если вам нужен третий раздел, то моя функция js не будет работать. Мы должны были бы сделать это по-другому. Если вы меняете идентификаторы div, просто убедитесь, что вы изменили их и в функции.

Miguel G 19.04.2023 17:40

Да, я повторяю div и id в другом разделе той же страницы, но там ничего не меняется. Я не понимаю, почему. Для ясности: текст1 — английский, текст2 — другой язык, и я хочу, чтобы тексты менялись по всему сайту.

art vanderlay 20.04.2023 09:52

Думаю, мне также нужна какая-то функция, которая сохраняет смену языка при переходе на другую страницу.

art vanderlay 20.04.2023 10:05

Функция document.getElementById("id") получит ПЕРВЫЙ элемент с идентификатором "id". Таким образом, либо вам нужно поместить ВЕСЬ текст на одном языке в один div, либо вы можете сделать это по-другому, возможно, используя класс, а затем извлекая все элементы с этим именем класса.

Miguel G 20.04.2023 17:23

и как лучше всего сохранить смену языка на всем сайте, чтобы пользователю не приходилось нажимать кнопку на каждой странице?

art vanderlay 20.04.2023 21:33

Я не знаю, правильно ли это, но я добавляю этот ответ на всякий случай.

function onloadtext(){
    document.getElementById("text1").innerHTML = `<h1>Welcome</h1><p>English text</p>`;
}
 const toggle = () => {
  let el1 = document.getElementById("text1");
  let btn = document.getElementById("toggle");
  if (btn.value == 'Swedish'){
    btn.value = 'English';
    el1.innerHTML = `<h1>Välkommen</h1><p>Swedish text</p>`;
  }else{
    btn.value = 'Swedish';
    el1.innerHTML = `<h1>Welcome</h1><p>English text</p>`;
  }
}
<body onload = "onloadtext()">
 Translate in:<input type = "button" id = "toggle" onclick = "toggle()" value = "Swedish">
 <div class = "content">
    <div id = "text1"></div>
 </div>
</body>

Я понимаю, что вместо того, чтобы поменять местами содержимое text1 и text2, вы хотите скрыть одно и сделать видимым другое. Я надеюсь, что приведенный ниже код поможет.

var text1=document.getElementById('text1');
var text2=document.getElementById('text2');

const swap = () => {
  if (text1.classList.contains("hidden")){ //if text1 contains class 'hidden'
    text1.classList.remove("hidden"); //remove hidden class from text1
    text2.classList.add("hidden"); //add hidden class to text2
  }
  else{
    text1.classList.add("hidden"); //add hidden class to text1
    text2.classList.remove("hidden"); //remove hidden class from text2
  }
}
.hidden{
  display:none;
}
<button onclick = "swap()">Switch Text</button>

<div class = "content">
  <div id = "text1">
    <h1>Welcome</h1>
    <p>English text</p>
  </div>
  <div id = "text2" class = "hidden">
    <h1>Välkommen</h1>
    <p>Swedish text</p>
  </div>
</div>

Спасибо! Я тоже попробую. Размещать ли var text1=document.getElementById('text1'); вар текст2 = документ.getElementById ('текст2'); в <script> и .hidden{ display:none; } слишком?

art vanderlay 19.04.2023 08:58

Вы должны поместить .hidden{ display:none;} между тегами <style></style> или в отдельный файл .css. Кроме того, другие коды, которые вы запрашиваете, должны быть помещены между тегами <script></script> или в отдельном файле .js. Коды в порядке фрагментов кода в моем ответе следующие: 1. HTML-код 2. CSS-код 3. Javascript-код Перейдите по этой ссылке, чтобы узнать, как добавить javascript в HTML; digitalocean.com/community/tutorials/…

MrAlbino 19.04.2023 09:06

Спасибо! Заменит ли это все тексты на одной странице в разных разделах, если я дам им правильный идентификатор?

art vanderlay 19.04.2023 09:21

Зависит от того, что вы подразумеваете под all texts. В случае text1 и text2 да, но если вы добавите text3, вам нужно обновить код javascript.

MrAlbino 19.04.2023 09:41

только текст1 и текст2. Я пробовал ваш код, но, похоже, он только меняет позиции, а не видимость. Наверное, я был неясен в своем вопросе, моя вина! Мигель отредактировал свой код, и он работает нормально, но мне не удалось понять, почему тексты не меняются в других разделах на той же странице.

art vanderlay 19.04.2023 10:10

Это должно работать.


<div id = "swap-button" style = "cursor: pointer;">Click Me</div>

<div class = "content">
  <div id = "text1">
    <h1>Welcome</h1>
    <p>English text</p>
  </div>
  <div id = "text2">
    <h1>Välkommen</h1>
    <p>Swedish text</p>
  </div>
</div>

<script>
  const swapText = () => {
    const text1Element = document.getElementById('text1');
    const text2Element = document.getElementById('text2');
    const text1 = text1Element.innerHTML;
    text1Element.innerHTML = text2Element.innerHTML;
    text2Element.innerHTML = text1;
  };

  document.getElementById('swap-button').onclick = () => {
    swapText();
  };
</script>

Просто добавьте свой значок вместо


<div id = "swap-button" style = "cursor: pointer;">Click Me</div> 

также поменять местами не видимость. Извините, что не четко спросил!

art vanderlay 19.04.2023 10:13

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