Создание нескольких одинаковых изображений элемента DOM

Я новый разработчик и работаю над Tic Tac Toe SPA. У меня есть рабочая игра, но я хочу настроить игровые жетоны. Я пробовал создать элемент DOM несколькими разными способами, и все они оказались успешными. Вот в чем проблема:

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

const stark = document.createElement('img')
  stark.src = 'https://i.imgur.com/d70XlET.png'
  stark.height = 80
  stark.width = 80

const lanister = document.createElement('img')
  lanister.src = 'https://i.imgur.com/d70XlET.png'
  lanister.height = 80
  lanister.width = 80

const play = (event) => {
  if (gameOver === false) {
    if (event.target.innerHTML === '') {
      $('#' + event.target.id).append(turn)
    }
  }
}

'Turn' - это переменная, которая работает с функцией переключения для переключения между игроками и сохраняет, в зависимости от того, какой игрок повернул (т. е. 'stark')

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

const player1 = stark
const player2 = lanister

let turn = player1
let prevTurn = player2

const togglePrevTurn = () => {
  if (!gameOver) {
    if (prevTurn === player1) {
      prevTurn = player2
    } else {
      prevTurn = player1
    }
  }
}

const toggleTurn = () => {
  if (!gameOver) {
    if (turn === player1) {
      turn = player2
    } else {
      turn = player1
    }
    $('#message').text(turn + " 's turn")
  }
}

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

CertainPerformance 09.12.2018 01:46

Извините, вы были правы. Это не функция. Я обновил пост

Chris Conley 09.12.2018 01:56
Поведение ключевого слова "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
2
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Когда вы используете Javascript appendChild или jQuery append, когда вы передаете ему элемент, этот элемент получает удаленный из своего предыдущего местоположения в DOM (если он находится в DOM), а тогда вставляется в новую позицию. Похоже, что вам нужно каждый раз явно создавать новый элемент, что вы могли бы сделать с cloneNode().

Кроме того, вероятно, лучше всего называть ваши переменные точно - если turn - это образ, назовите его, чтобы было понятно, что это образ, возможно, currentPlayerImage.

Кроме того, поскольку у вас уже есть ссылка на event.target, нет необходимости повторно выбирать ее с помощью $('#' + event.target.id) - просто выберите event.target:

const play = (event) => {
  if (gameOver === false) {
    if (event.target.innerHTML === '') {
      $(event.target).append(currentPlayerImage.cloneNode());
    }
  }
}

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