我如何删除“上一个”和“下一个” innerHTML而不破坏它们

SpencerKMedia

我正在研究一个英雄轮播,除了JS将控件的innerHTML分别设置为this.carouselControls[0]this.carouselControls[1],任何尝试将它们的删除都破坏了轮播的其余部分之外,其他一切看起来都很棒

我尝试将其设置为空字符串,空值并一起更改值,但是设置JS的方式会破坏轮播的其余部分。

我在下面链接了Codepen,因为它更易于以可见形式共享css和html,我在这里和下面都有JS。我已经花了几个小时,无法解决这个问题。任何帮助对此表示感谢!

CodePen演示

const heroContainer = document.querySelector('.hero-container');
const heroControlsContainer = document.querySelector('.hero-controls');
//heroControls sets the class of the control which I need and the innerHTML which I dont.
const heroControls = ['previous', 'next'];
const heroItems = document.querySelectorAll('.hero-item');

class Carousel {
  constructor(container, items, controls) {
    this.carouselContainer = container;
    this.carouselControls = controls;
    this.carouselArray = [...items];
  }

  // Assign initial css classes for hero and nav items
  setInitialState() {
    this.carouselArray[0].classList.add('hero-item-first');
    this.carouselArray[1].classList.add('hero-item-previous');
    this.carouselArray[2].classList.add('hero-item-selected');
    this.carouselArray[3].classList.add('hero-item-next');
    this.carouselArray[4].classList.add('hero-item-last');
  }

  // Update the order state of the carousel with css classes
  setCurrentState(target, selected, previous, next, first, last) {

    selected.forEach(el => {
      el.classList.remove('hero-item-selected');

      if (target.className == 'hero-controls-previous') {
        el.classList.add('hero-item-next');
      } else {
        el.classList.add('hero-item-previous');
      }
    });

    previous.forEach(el => {
      el.classList.remove('hero-item-previous');

      if (target.className == 'hero-controls-previous') {
        el.classList.add('hero-item-selected');
      } else {
        el.classList.add('hero-item-first');
      }
    });

    next.forEach(el => {
      el.classList.remove('hero-item-next');

      if (target.className == 'hero-controls-previous') {
        el.classList.add('hero-item-last');
      } else {
        el.classList.add('hero-item-selected');
      }
    });

    first.forEach(el => {
     el.classList.remove('hero-item-first');

      if (target.className == 'hero-controls-previous') {
        el.classList.add('hero-item-previous');
      } else {
         el.classList.add('hero-item-last');
      }
    });

    last.forEach(el => {
      el.classList.remove('hero-item-last');

      if (target.className == 'hero-controls-previous') {
        el.classList.add('hero-item-first');
      } else {
        el.classList.add('hero-item-next');
      }
    });
  }

  // Construct the carousel navigation
  setNav() {
    heroContainer.appendChild(document.createElement('ul')).className = 'hero-nav';

    this.carouselArray.forEach(item => {
      const nav = heroContainer.lastElementChild;
      nav.appendChild(document.createElement('li'));
    });
  }

  // Construct the carousel controls
  setControls() {
    this.carouselControls.forEach(control => {
      heroControlsContainer.appendChild(document.createElement('button')).className = `hero-controls-${control}`;
    });
    //These set innerHTML to the controls
    !!heroControlsContainer.childNodes[0] ? heroControlsContainer.childNodes[0].innerHTML = this.carouselControls[0] : null;
    !!heroControlsContainer.childNodes[1] ? heroControlsContainer.childNodes[1].innerHTML = this.carouselControls[1] : null;

  }

  // Add a click event listener to trigger setCurrentState method to rearrange carousel
  useControls() {
    const triggers = [...heroControlsContainer.childNodes];

    triggers.forEach(control => {
      control.addEventListener('click', () => {
        const target = control;
        const selectedItem = document.querySelectorAll('.hero-item-selected');
        const previousSelectedItem = document.querySelectorAll('.hero-item-previous');
        const nextSelectedItem = document.querySelectorAll('.hero-item-next');
        const firstCarouselItem = document.querySelectorAll('.hero-item-first');
        const lastCarouselItem = document.querySelectorAll('.hero-item-last');

        this.setCurrentState(target, selectedItem, previousSelectedItem, nextSelectedItem, firstCarouselItem, lastCarouselItem);
      });
    });
  }
}

const exampleCarousel = new Carousel(heroContainer, heroItems, heroControls);

exampleCarousel.setControls();
exampleCarousel.setInitialState();
exampleCarousel.useControls();
乔丹·戴格尔

我假设您想摆脱显示在左箭头上的下一个按钮,因此您应该摆脱那些看上去似乎不必要的行。

 //These set innerHTML to the controls
 !!heroControlsContainer.childNodes[0] ? heroControlsContainer.childNodes[0].innerHTML = this.carouselControls[0] : null;
 !!heroControlsContainer.childNodes[1] ? heroControlsContainer.childNodes[1].innerHTML = this.carouselControls[1] : null;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery迭代上一个和下一个兄弟姐妹,直到第一个不匹配

来自分类Dev

Flutter小部件不返回值并关注下一个/上一个元素

来自分类Dev

angularjs不专注于下一个元素

来自分类Dev

不了解递归的下一个迭代

来自分类Dev

不转换到 for 循环中的下一个

来自分类Dev

如何使我的“上一个”和“下一个”按钮在分页上工作?

来自分类Dev

Sublime Text-如何使“快速添加下一个”不环绕文件的开头

来自分类Dev

如果不遵守条件,如何禁用下一个按钮PyQt5 QWizard?

来自分类Dev

如何从 twbs 分页插件中删除“第一个”、“上一个”、“下一个”和“最后一个”按钮

来自分类Dev

如何为iPhone用户从多个表单中删除“下一个”和“上一个”按钮?

来自分类Dev

警告:不推荐使用 Prop minSize 并将在下一个主要版本中删除

来自分类Dev

当我在JavaScript上单击下一个和上一个时,如何设置数组的顺序?

来自分类Dev

使用scrollTop滚动到下一个和上一个div,我该如何完成?

来自分类Dev

我如何CD到上一个/下一个兄弟目录?

来自分类Dev

我如何通过下一个上一个更改单选按钮

来自分类Dev

使用一个命令的输出并使用它们作为下一个命令的输入来运行命令

来自分类Dev

如何为该滑块添加下一个和上一个按钮,而不是data-link =“ n”(删除分页并仅添加下一个和上一个按钮)

来自分类Dev

如何给分页的上一个和下一个按钮?

来自分类Dev

如何添加下一个和上一个按钮弹出?

来自分类Dev

如何获取数组中的下一个和上一个元素,Ruby

来自分类Dev

colorbox:如何禁用下一个和上一个按钮

来自分类Dev

如何获取jQuery getJSON下一个和上一个

来自分类Dev

如何从日期变量中查找下一个和上一个日期

来自分类Dev

如何获得模型的上一个和下一个对象?

来自分类Dev

如何向 ListView 添加上一个和下一个按钮

来自分类Dev

如何遍历HTML节点以找到匹配项并从节点获取下一个innerHTML

来自分类Dev

获取javascript中innerHTML为动态值的下一个子元素

来自分类Dev

得到接合三个表聚集的平均值和下一个显示它们在第一表中的每个值

来自分类Dev

组合模型,以便用户操作将它们带到下一个对象的视图

Related 相关文章

  1. 1

    jQuery迭代上一个和下一个兄弟姐妹,直到第一个不匹配

  2. 2

    Flutter小部件不返回值并关注下一个/上一个元素

  3. 3

    angularjs不专注于下一个元素

  4. 4

    不了解递归的下一个迭代

  5. 5

    不转换到 for 循环中的下一个

  6. 6

    如何使我的“上一个”和“下一个”按钮在分页上工作?

  7. 7

    Sublime Text-如何使“快速添加下一个”不环绕文件的开头

  8. 8

    如果不遵守条件,如何禁用下一个按钮PyQt5 QWizard?

  9. 9

    如何从 twbs 分页插件中删除“第一个”、“上一个”、“下一个”和“最后一个”按钮

  10. 10

    如何为iPhone用户从多个表单中删除“下一个”和“上一个”按钮?

  11. 11

    警告:不推荐使用 Prop minSize 并将在下一个主要版本中删除

  12. 12

    当我在JavaScript上单击下一个和上一个时,如何设置数组的顺序?

  13. 13

    使用scrollTop滚动到下一个和上一个div,我该如何完成?

  14. 14

    我如何CD到上一个/下一个兄弟目录?

  15. 15

    我如何通过下一个上一个更改单选按钮

  16. 16

    使用一个命令的输出并使用它们作为下一个命令的输入来运行命令

  17. 17

    如何为该滑块添加下一个和上一个按钮,而不是data-link =“ n”(删除分页并仅添加下一个和上一个按钮)

  18. 18

    如何给分页的上一个和下一个按钮?

  19. 19

    如何添加下一个和上一个按钮弹出?

  20. 20

    如何获取数组中的下一个和上一个元素,Ruby

  21. 21

    colorbox:如何禁用下一个和上一个按钮

  22. 22

    如何获取jQuery getJSON下一个和上一个

  23. 23

    如何从日期变量中查找下一个和上一个日期

  24. 24

    如何获得模型的上一个和下一个对象?

  25. 25

    如何向 ListView 添加上一个和下一个按钮

  26. 26

    如何遍历HTML节点以找到匹配项并从节点获取下一个innerHTML

  27. 27

    获取javascript中innerHTML为动态值的下一个子元素

  28. 28

    得到接合三个表聚集的平均值和下一个显示它们在第一表中的每个值

  29. 29

    组合模型,以便用户操作将它们带到下一个对象的视图

热门标签

归档