Попытка создать интерактивную таблицу, которая изменяет значение в неупорядоченном списке - PullRequest
0 голосов
/ 25 мая 2018

Отказ от ответственности: Это мой первый пост, и я очень плохо знаком с кодированием.Стараюсь изо всех сил учить себя кодированию из чистого интереса и решимости.Пожалуйста, дайте мне знать, если что-то в моем коде может быть улучшено, или я должен делать вещи по-другому.Будьте осторожны, смеется

Сейчас я работаю над небольшим проектом, который разработчик дал мне, чтобы помочь мне разобраться в основах.Он заставил меня создать таблицу 3х3 и сделать так, чтобы при щелчке по квадрату он становился черным, а при повторном щелчке по нему - белым.

Моя следующая цель - создать неупорядоченный список, имеющий цветкаждого выписанного квадрата и изменяется при нажатии на квадраты.Например:

R1C1 - белый ...... щелкните ...... R1C1 - черный.

У меня естьсжег много серого вещества из-за этого и не могу понять это.Я пытался подойти к нему разными способами, но безрезультатно.Заранее спасибо за любую помощь.

td {
  background: white;
  cursor: pointer;
  padding 2px
}

td.black-cell {
  background: black;
}

.hidden {
  display: none;
}
<html>
<head>
  <title>My Game</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <link rel="stylesheet" href="game2css.css">
  <style>
      table {
      width: 50%;
      height: 50%;
    }
    
    td,
    th {
      border: 2px solid;
      padding: 10px;
     }
  </style>
</head>

<body>
  <table>
    <tr>
      <td onclick='myFunction()' id="top-left"> </td>
      <td id="top-middle"></td>
      <td id="top-right"></td>
    </tr>
    <tr>
      <td id="middle-left"></td>
      <td id="middle-middle"></td>
      <td id="middle-right"></td>
    </tr>
    <tr>
      <td id="bottom-left"></td>
      <td id="bottom-middle"></td>
      <td id="bottom-right"></td>
    </tr>
  </table>
  <UL id="BWList">
    <li id="r1c1">Row 1, Column 1 is white.</li>
    <li id="r1c2">Row 1, Column 2 is white.</li>
    <li id="r1c3">Row 1, Column 3 is white.</li>
    <li id="r2c1">Row 2, Column 1 is white.</li>
    <li id="r2c2">Row 2, Column 2 is white.</li>
    <li id="r2c3">Row 2, Column 3 is white.</li>
    <li id="r3c1">Row 3, Column 1 is white.</li>
    <li id="r3c2">Row 3, Column 2 is white.</li>
    <li id="r3c3">Row 3, Column 3 is white.</li>
  </UL>
  <script>
    $(function() {
      $('td').click(function() {
        $(this).toggleClass("black-cell");
      });
    });

    function myFunction() {
      var textnode = document.createTextNode("Black")
      var item =
        document.getElementById("r1c1").childNodes[0];
      item.replaceChild(textnode, item.childNodes[0]);
    }
    // I'm fairly positive this is the wrong approach but included it just to show one way that I
  </script>
</body>

</html>

https://jsfiddle.net/9dwkhLyz/1/

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Просто быстрое и грязное решение: идея состоит в том, чтобы иметь одинаковые id и class имена для ячейки и соответствующее описание.Затем вы можете использовать следующий код, чтобы получить все промежутки с тем же именем класса, что и у ячейки id.

$("." + $(this).attr('id'))  //prepend a ".' to the ID

, что аналогично замене "# r1c1" и т. Д. На ".r1c1", поэтомупромежутки выбраны.Затем вы можете применить тумблер класса CSS.

Вы также можете использовать jQuery для построения таблицы и списка, чтобы код был чище.

$(function() {
  $('td').click(function() {
    
    // Toggle cell style
    $(this).toggleClass("black-cell");
    
    $("." + $(this).attr('id')).each(function() {
  
      // toggle visibility of "black" and "white":
      $(this).toggleClass('hidden');

    });
  });
});
table {
  width: 50%;
  height: 50%;
}

td,
th {
  border: 2px solid;
  padding: 10px;
}

td {
  background: white;
  cursor: pointer;
  padding 2px
}

td.black-cell {
  background: black;
}

/* Hide the word "black" on load. */
.hidden {
  display: none;
}
<html>

<head>
  <title>My Game</title>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <link rel="stylesheet" href="game2css.css">
</head>

<body>
  <table>
    <tr>
      <td id="r1c1"> </td>
      <td id="r1c2"></td>
      <td id="r1c3"></td>
    </tr>
    <tr>
      <td id="r2c1"></td>
      <td id="r2c2"></td>
      <td id="r2c3"></td>
    </tr>
    <tr>
      <td id="r3c1"></td>
      <td id="r3c2"></td>
      <td id="r3c3"></td>

    </tr>
  </table>
  <UL id="BWList">
    <li>Row 1, Column 1 is <span class="r1c1">white</span><span class="r1c1 hidden">black</span>.</li>
    <li>Row 1, Column 2 is <span class="r1c2">white</span><span class="r1c2 hidden">black</span>.</li>
    <li>Row 1, Column 3 is <span class="r1c3">white</span><span class="r1c3 hidden">black</span>.</li>
    <li>Row 2, Column 1 is <span class="r2c1">white</span><span class="r2c1 hidden">black</span>.</li>
    <li>Row 2, Column 2 is <span class="r2c2">white</span><span class="r2c2 hidden">black</span>.</li>
    <li>Row 2, Column 3 is <span class="r2c3">white</span><span class="r2c3 hidden">black</span>.</li>
    <li>Row 3, Column 1 is <span class="r3c1">white</span><span class="r3c1 hidden">black</span>.</li>
    <li>Row 3, Column 2 is <span class="r3c2">white</span><span class="r3c2 hidden">black</span>.</li>
    <li>Row 3, Column 3 is <span class="r3c3">white</span><span class="r3c3 hidden">black</span>.</li>
  </UL>
</body>

</html>
0 голосов
/ 25 мая 2018

Вы можете попробовать что-то подобное без необходимости каких-либо идентификаторов и / или сложного кода.Просто используйте index(), чтобы получить li, на который вы хотите настроить таргетинг, и откорректировать текст с помощью CSS и псевдоэлемента.

$('table td').click(function() {
  $(this).toggleClass("black-cell");
  /*Get the index of the td within the tr +
    Get the index of the parent tr within the table*/
  var n = $(this).index() + $(this).parent().index() * 3;
  $('ul#BWList li').eq(n).toggleClass("selected");
});
table {
  width: 50%;
}

td{
  border: 2px solid;
  padding: 10px;
  background: white;
  cursor: pointer;
  padding 2px
}

td.black-cell {
  background: black;
}

li:after {
  content: " white."
}

li.selected:after {
  content: " black."
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table>
  <tr>
    <td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td>
  </tr>
</table>
<ul id="BWList">
  <li>Row 1, Column 1 is</li>
  <li>Row 1, Column 2 is</li>
  <li>Row 1, Column 3 is</li>
  <li>Row 2, Column 1 is</li>
  <li>Row 2, Column 2 is</li>
  <li>Row 2, Column 3 is</li>
  <li>Row 3, Column 1 is</li>
  <li>Row 3, Column 2 is</li>
  <li>Row 3, Column 3 is</li>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...