5

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

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

var element = document.createElement("someelement")

前提是:

  • someelement是一个有效的 HTML 标记 ( div, a, h1, etc)
  • element可以是任何非保留字且以字母开头的字符串。
  • 它运行的设备是现代设备,RAM 不是问题 <- 编辑

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

注意:如果你有来源,那就太好了。

4

3 回答 3

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/

于 2013-10-19T10:41:35.317 回答
3

根据规范,如果 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);
}
于 2013-10-19T10:41:06.910 回答
1

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

Error: InvalidCharacterError: DOM Exception 5

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

如果你传递 undefined,或者不指定参数,它会创建一个 undefined 元素。

<undefined></undefined>

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

如果错误仍然出现,也许检查字符串是否只包含字母 az、下划线和连字符。

于 2013-10-19T10:48:46.383 回答