【问题标题】:Convert snippet Jquery to JS将片段 Jquery 转换为 JS
【发布时间】:2020-03-26 23:43:54
【问题描述】:

我可以得到任何帮助来将此 Jquery sn-p 转换为 JS vanilla 吗?我一直在尝试这样做,但总是出错。提前感谢您的任何回复。

编辑:函数 move_player 是我要翻译的,其余的已经完成。

$(document).ready(function() {
  var end_of_track = 15;
  var players = [
    {
      id: 1,
      position: 0,
      keycode: 80,
      css_locator: '#player1_strip',
    },
    {
      id: 2,
      position: 0,
      keycode: 81,
      css_locator: '#player2_strip',
    },
  ];

  function advancePlayer(keyCode) {
    players.forEach(function(player) {
      if (
        keyCode == player.keycode &&
        players[0].position < end_of_track &&
        players[1].position < end_of_track
      ) {
        move_player(player.css_locator);
        player.position++;
        winner(player.position, player.id);
      }
    });
  }

  $(document).keyup(function(e) {
    advancePlayer(e.keyCode);
  });
});

function move_player(strip) {
  $(strip)
    .find('td.active')
    .removeClass('active')
    .next()
    .addClass('active');
}

function winner(player, num) {
  if (player > 14) {
    alert('Player ' + num + ' has won!');
  }
} ```


【问题讨论】:

  • 请展示您的尝试,以便我们帮助您调试它。另外,strip 的值是多少?这很重要,这样我们才能知道我们是在处理单个元素还是一个集合。
  • 我正在尝试将 jQuery 代码转换为 vanilla js。我会将其余代码发送给您,以便您查看。

标签: javascript jquery frameworks code-snippets


【解决方案1】:

假设 ES6 是允许的,您可以使用 querySelector 找到当前活动的 td 元素,然后从元素 classList 中删除其活动类,然后使用 nextElementSibling 获取其兄弟 td 元素和将active 类添加到它。

ES6:

function move_player(strip)
{
    var activeElement = document.querySelector(`${strip} td.active`);
    activeElement.classList.remove('active');

    var nextElement = activeElement.nextElementSibling;
    nextElement.classList.add('active');
}

Example

在 ES6 之前:

function move_player(strip)
{
    strip = strip.replace('#', '');
    var stripElement = document.getElementById(strip);
    var activeElements = stripElement.getElementsByClassName('active');

    if(activeElements.length > 0)
    {
        var active = activeElements[0]
        active.classList.remove('active');
        var nextElement = active.nextElementSibling;
        nextElement.classList.add('active');
    }
}

Example

【讨论】:

  • 我之前试过这个,没用。我得到的错误是这个 TypeError: strip.querySelector is not a function
  • querySelector 是 ES6。我已经为早期版本更新了它。
  • 谢谢,但仍然出现错误.. 这次它说 strip 为空
  • 抱歉没有看到您尝试将选择器而不是元素传递给 move_player 尝试更新
  • 没问题 :) 如果这个答案有帮助,请考虑投票或选择它作为问题解决方案
猜你喜欢
  • 2012-05-21
  • 2011-06-14
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多