kas*_*bah 16 javascript domparser
如果你从MDN看一下DOMParser的例子:
var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// returns a Document, but not a SVGDocument nor a HTMLDocument
parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// returns a SVGDocument, which also is a Document.
parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html");
// returns a HTMLDocument, which also is a Document.
Run Code Online (Sandbox Code Playgroud)
他们不断创建new DOMParser实例.但为什么?一个解析器实例不足够吗?那些进行大量解析的代码,在创建新实例方面是否具有性能优势?
编辑:人们正在挂起这个例子.更好地说出我的问题:为什么不DOMParser更喜欢JSON和它的parse方法?为什么不是 parseFromString静态方法?
您发布的示例只是 3 个不同的示例连接成 1 个,它们都声明了一个新的 DOMParser,因此每个示例都可以单独运行。
也许吧,但一般来说,我看到很多关于 (new DOMParser).parseFromString 的代码。
如果他们使用它(new DOMParser()).parseFromString,那是因为他们只使用它一次,并且在其他地方不需要它,因此为其创建一个单独的变量是多余的。
这段代码:
var
proto = DOMParser.prototype
, nativeParse = proto.parseFromString
;
// Firefox/Opera/IE throw errors on unsupported types
try {
// WebKit returns null on unsupported types
if ((new DOMParser()).parseFromString("", "text/html")) {
// text/html parsing is natively supported
return;
}
} catch (ex) {}
proto.parseFromString = function(markup, type) {
if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
var
doc = document.implementation.createHTMLDocument("")
;
if (markup.toLowerCase().indexOf('<!doctype') > -1) {
doc.documentElement.innerHTML = markup;
}
else {
doc.body.innerHTML = markup;
}
return doc;
} else {
return nativeParse.apply(this, arguments);
}
};
Run Code Online (Sandbox Code Playgroud)
如果浏览器不支持该DOMParser对象,这几乎是一种故障保护。