如何使用JavaScript创建自定义HTML元素?

时间:2018-11-15 18:53:41

标签: javascript html element web-component

我希望能够创建一个自定义HTML元素,该元素可以显示cookie的值,以便可以轻松地将cookie值插入到我的文档中。 到目前为止,我的代码是:

var cNum = 0;

customElements.define('get-cookie', getC);

class getC extends HTMLElement {
  constructor() {
    super();

    cNum++;
    var cName = this.getAttribute('cName');
    this.setAttribute('id', cName + cNum);
    var currentE = document.getElementById(cName + cNum);
    var cValue = 'Oops! We have run into a problem';
    if (this.hasAttribute('cName')) {
      cValue = getCookie(this.getAttribute('img'));
    }
    var outC = document.createElement('a');
    outC.innerHTML = cValue;
    currentE.appendChild(outC);
  }
}

<p>
  Current User: <get-cookie cName="currentUSR" ></get-cookie>
</p>

但是当我在firefox上运行它时,我得到了这个错误:

  

ReferenceError:初始化之前无法访问词汇声明“ getC”(myfile.js:4:1)

也:我对jQuery的了解为零,如果我可以避免的话,我宁愿这样做。

非常感谢所有帮助!谢谢!

编辑:我忘了补充一点,我已经在代码的其他地方定义了getCookie()函数。

1 个答案:

答案 0 :(得分:1)

customElements.define('get-cookie', getC);应该在您实际定义了类之后位于底部。

在类定义之后保留它可以解决该问题:

var cNum = 0;

class getC extends HTMLElement {
  constructor() {
    super();

    cNum++;
    var cName = this.getAttribute('cName');
    this.setAttribute('id', cName + cNum);
    var currentE = document.getElementById(cName + cNum);
    var cValue = 'Oops! We have run into a problem';
    if (this.hasAttribute('cName')) {
      cValue = this.getCookie(this.getAttribute('img'));
    }
    var outC = document.createElement('a');
    outC.innerHTML = cValue;
    currentE.appendChild(outC);
  }

  getCookie() {
    return 'John Doe';
  }
}

customElements.define('get-cookie', getC);
<p>Current User:
  <get-cookie cName="currentUSR"></get-cookie>
</p>

在这里,我也不确定getCookie是什么。因此,我在类上创建了一个名为getCookie的方法,现在我在constructor中将其与this关键字一起使用。