代码之家  ›  专栏  ›  技术社区  ›  sjw0525

有没有办法更改javascript es6中“this”的css属性?

  •  0
  • sjw0525  · 技术社区  · 7 年前

    我想知道在js es6中使用“this”时,是否有办法更改元素的样式。我有以下代码:

    const mobileSubItems = document.querySelectorAll(".mobile-menu-overlay__item");
    openSubMenu = (e) => {
      console.log(this);
    }
    
    for (var i = 0; i < mobileSubItems.length; i++) {
      mobileSubItems[i].addEventListener('click', openSubMenu);
    }
    <div class="mobile-menu-overlay__item-content" style="maxHeight:0;">Test 1</div>
    <div class="mobile-menu-overlay__item-content" style="maxHeight:0;">Test 2</div>
    <div class="mobile-menu-overlay__item-content" style="maxHeight:0;">Test 3</div>

    我希望openSubmenu代码如下所示:

    openSubMenu = (e) => {
      this.style.maxHeight = "none";
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   ztadic91    7 年前

    是的,您可以使用提供的逻辑。但由于箭头函数,您正在丢失此上下文。相反,请使用 event.target 所有物

    var openSubMenu = (e)=> {
      e.target.style.maxHeight = '240px';
    }
    

    如果希望它指向单击的元素,请使用function关键字定义openSubMenu函数。

    var openSubMenu = function(e) {
      this.style.maxHeight = '240px';
    }
    

    Working fiddle

        2
  •  0
  •   jfriend00    7 年前

    有没有办法更改javascript es6中“this”的css属性?

    是的,对回调使用普通函数定义,而不是胖箭头定义,因此 this 触发的事件集将为您提供。

    因为您使用的是fat arrow函数 在您的 openSubMenu() 函数不是从调用方获取的,而是从函数声明上下文获取的(的“词法”值 )。如果您声明 打开子菜单() 作为正常功能,将设置click事件 作为导致事件的DOM元素,然后可以使用 设置其样式。

    因此,更改为:

    function openSubMenu(e) {
        console.log(this);
    }
    

    人们需要记住,胖箭头函数不仅仅是函数声明的快捷方式。它们还影响 所以,如果你想要 函数的调用者设置,然后不要使用fat arrow函数,因为fat arrow声明会导致 待使用。


    我假设您已经知道,您还可以引用触发事件的DOM元素,使用 e.target ,但由于您明确询问如何 工作,这就是我在上面向你展示的。