我可以安全地使用document.createElement而不是forms [i] .document.createElement(' INPUT')?

时间:2017-12-19 16:57:24

标签: javascript internet-explorer-11

我支持一些旧版javascript。

在IE8中,这有效:

var hi = forms[i].document.createElement('INPUT');

在IE 11中,该代码抛出异常。

" JavaScript运行时错误:无法获取属性' createElement'未定义或空引用"

我想我可以删除forms[i]并安全地执行:

var hi = document.createElement('INPUT');

我已经运行了更新的代码,它似乎正常运行。

有人可以确认我的假设是正确的。

完整功能:

function setFormGotoURL(url) {
      var forms = PARENT.main.document.forms;
      if (forms!=null && typeof(forms)!="undefined" && forms.length>0) {
              for (var i=0;i<forms.length;i++) {
                if (forms[i].gotoURL) {
                        var gotoURL = forms[i].gotoURL;
                        if (gotoURL!=null && typeof(gotoURL)!="undefined") {
                            gotoURL.value=url;
                       }
                } //if
                else {
                    //var hi = PARENT.main.document.createElement('INPUT');
                    var hi = document.createElement('INPUT');
                    hi.setAttribute("type","hidden");
                    hi.setAttribute("name","gotoURL");
                    hi.setAttribute("value",url);
                    forms[i].appendChild(hi);
                }
              }
      }

}

1 个答案:

答案 0 :(得分:1)

来自MDN

  

在HTML文档中,Document.createElement()方法创建   由tagName指定的HTML元素,如果是tagName,则为HTMLUnknownElement   没有得到认可。在XUL文档中,它创建指定的XUL   元件。在其他文档中,它创建一个null元素   名称空间URI。

MDN示例:

>>> import numba
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\__init__.py", line 12, in <module>
    from .special import typeof, prange
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\special.py", line 4, in <module>
    from .parfor import prange
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\parfor.py", line 23, in <module>
    from numba import array_analysis, postproc, typeinfer
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\array_analysis.py", line 26, in <module>
    from numba.extending import intrinsic
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\extending.py", line 15, in <module>
    from .pythonapi import box, unbox, reflect, NativeValue
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\numba\pythonapi.py", line 12, in <module>
    import numba.ctypes_support as ctypes
AttributeError: module 'numba' has no attribute 'ctypes_support'

您创建元素并将其分配给变量,然后将其添加到您想要的任何位置。 document.body.onload = addElement; function addElement () { // create a new div element var newDiv = document.createElement("div"); // and give it some content var newContent = document.createTextNode("Hi there and greetings!"); // add the text node to the newly created div newDiv.appendChild(newContent); // add the newly created element and its content into the DOM var currentDiv = document.getElementById("div1"); document.body.insertBefore(newDiv, currentDiv); } 代码不正确。 var hi = forms[i].document.createElement('INPUT');将返回null,因为document是一个独立的标记,而不是元素的属性,这就是为什么它会为您提供错误anything.document,因为Unable to get property 'createElement' of undefined or null reference"没有属性{{ 1}}

我理解您的困惑,但是如果您必须创建元素然后将其添加到HTML,那么从表单创建标记无关紧要,如果您必须指定添加它的位置。我希望你能像那样理解它。