document.createElement(“”)会失败吗?

时间:2013-10-19 10:36:48

标签: javascript error-handling

如果我在错误的网站上提问,请重新定位(基于Javascript的问题,所以我很确定它位于正确的位置)。

我目前正处理错误捕获即将完成并为客户端设置的项目。我想知道Javascript中的以下行是否会失败?

var element = document.createElement("someelement")

提供:

  • someelement是有效的HTML代码(div, a, h1, etc
  • element可以是任何不是保留字的字符串,以字母开头。
  • 它运行的设备是现代设备,RAM不是问题< - EDIT

它会失败吗?如果确实如此,它将返回什么?

注意:如果你拥有它们,来源会很棒。

3 个答案:

答案 0 :(得分:5)

http://www.w3.org/TR/DOM-Level-2-Core/core.html

 Element            createElement(in DOMString tagName)
                                        raises(DOMException);

Exceptions
DOMException

INVALID_CHARACTER_ERR: Raised if the specified name contains an illegal character.

无效字符例如是空间:

document.createElement(" ")

http://jsfiddle.net/yRY6Q/

答案 1 :(得分:2)

根据the spec,如果tagName包含无效字符(空白字符等),则会引发DOMException。

在Firefox中,document.creatElement只会在传递无效字符时失败。空或未定义是可以的。

在Chrome中,document.createElement将失败并在传递null或无效字符时抛出InvalidCharacterError。未定义是可以的。

正如一些用户在评论中指出的那样,它总是会因内存资源等而失败,但是你无法做任何事情来阻止它。

所以,如果someelement is a valid HTML tag (div, a, h1, etc),它永远不会失败。

您可以使用此代码段查找无效字符:

for(var i = 0; i < 200; i++) {
    var chr = String.fromCharCode(i);
    var msg = i + ". " + chr + ": ";

    try {
        var elm = document.createElement(chr);
        msg += "OK";
    }
    catch(e)
    {
        msg += "FAIL";
    }

    console.log(msg);
}

答案 2 :(得分:1)

我所知道的唯一例外是以下(注意我使用的是Chrome):

Error: InvalidCharacterError: DOM Exception 5

当您将null,对象或数组作为参数传递时,会出现此异常。传递包含无效HTML字符的字符串(例如@!#?)时,它也会失败。

如果传递undefined,或者未指定参数,则会创建一个未定义的元素。

<undefined></undefined>

如果您确定此函数引发了错误,您应该在调用!== null之前检查您传递的字符串是否为createElement,因为这可能是您的问题的根源。

如果错误仍然存​​在,也许检查字符串是否只包含字母a-z,下划线和连字符。