gpt4 book ai didi

javascript - 创建新的 DOMParser 实例有什么意义?

转载 作者:可可西里 更新时间:2023-11-01 01:25:48 26 4
gpt4 key购买 nike

如果您查看 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.

他们不断创建新的 DOMParser 实例。但为什么?一个解析器实例不够吗?对于进行大量解析的代码,创建新实例是否具有性能优势?

编辑:人们对这个例子很感兴趣。更好地表达我的问题:为什么 DOMParser 不更像 JSON 及其 parse 方法?为什么 parseFromString 不是静态方法?

最佳答案

您发布的示例只是将 3 个不同的示例连接成 1 个,它们都声明了一个新的 DOMParser,因此每个示例都可以独立运行。

Maybe, but generally I see a lot of code around that does (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);
}
};

如果浏览器不支持 DOMParser 对象,这几乎是一种故障保护。

关于javascript - 创建新的 DOMParser 实例有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39977490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com