创建元素的不同方法有哪些

Ray*_*nos 5 javascript dom element

假设我想覆盖form.elements所有表格(当前和未来).

动机

关于polyfilling的这个问题RadioNodeList可以通过拦截所有form元素并手动为elements它们的属性编写自己的getter 来解决.

我该如何拦截?

除了以下,还有其他方法可以创建(形式)我需要拦截的元素

  • document.createElement
  • document.createElementNS
  • Node.importNode
  • Node.cloneNode
  • DOMImplementation.createDocument(也许,取决于有效覆盖Document.prototype.createElement/ NS是)

还有哪些缺点?

单独的问题,忽略性能会有什么好的理由不拦截节点创建?

kha*_*ael 0

表单元素的拦截可以通过一个函数来完成,该函数通过搜索表单的标签名称来解析节点,如果特定的事件或属性没有像您那样设置,那么您必须设置它,否则它是一个已经拦截的表单。

第二种选择是重写createElementonElement和 ondocument以使新元素由上述函数解析。

不好的部分是,对于较旧的 IE 版本,您必须编写一个单独的 HTC 文件才能使 Element 的行为符合您的意愿。

希望这会有所帮助,即使它有很多信息并且没有代码(这是一个非常讨厌的代码)。

编辑:

换句话说,您可以创建一个用于跨浏览器使用的重写 DOM 类(或者至少这是我过去 4 个月所做的事情),您可以在其中采用所有特殊行为并出于特殊原因对待它们。