gpt4 book ai didi

javascript - 是否可以检测 IE 何时忽略 xml 文档中的空白文本节点?

转载 作者:数据小太阳 更新时间:2023-10-29 02:41:54 25 4
gpt4 key购买 nike

我正在尝试为 text 编写垫片IE XML DOM 库的属性,但我遇到了有关格式化空格的问题。

如果我处理以下 XML 的文本属性

var doc1 = load_ie('<root><a>A</a><b>B</b></root>')
var doc2 = load_ie('<root><a>A</a> <b>B</b></root>');

他们给出不同的结果:

doc1.text // 'AB'
doc2.text // 'A B' - the multiple spaces are compressed to a single space

然而,令我惊讶的是,IE 似乎并不承认 x2 中存在的空格,就像其他浏览器一样:

doc1.documentElement.childNodes.length // 2
doc2.documentElement.childNodes.length // 2 (I expected 3!)

var doc3 = load_ie('<root><a>A</a> c <b>B</b></root>');
doc3.documentElement.childNodes.length // 3

如果我在 Google chrome 上运行测试,doc2 案例中的节点数是 3(“a”节点,一个包含 3 个空格的文本节点和“b”节点),类似于 doc3 案例的工作方式。 如果 IE 对我隐藏空白节点并且我无法区分第一种情况和第二种情况,即使它们需要返回不同的结果,我将如何编写我的 shim?


加载从字符串创建 XML 文档的代码:

load_ie = function(xmlstr){
var doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async=false;
doc.loadXML(xmlstr);
return doc;
}

load_w3c = function(xmlstr){
var p = new DOMParser();
return p.parseFromString(xmlstr, 'text/xml');
}

奖励问题:

我也无法使用 MSDN 文档中给出的示例。根据它,下面的XML

var d = load_ie(
'<root att=" 123 a ">\n' +
' <a> a a </a>\n' +
' <!-- comment b -->\n' +
' <?pi pi c ?>\n' +
' <![CDATA[ cdata d ]]>\n' +
' e f\n' +
'</root>'
);
d.text;

应该给

"a a cdata d e f"

但是我得到了

"a   a       cdata   d   \n   e   f" 

我想知道我是否遗漏了一些明显导致我出现奇怪行为的东西。

最佳答案

Internet Explorer 解析方式使用MSXML API,可配置为preserve or collapse whitespace .以下代码适用于 IE9:

load_ie = function(xmlstr){
var doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async=false;
doc.preserveWhiteSpace=true;
doc.loadXML(xmlstr);
return doc;
}

var doc = load_ie('<root><a>A</a> <b>B</b></root>');
console.log(doc.documentElement.text.length === 5)
console.log(doc.documentElement.childNodes.length === 3);
console.log(doc.documentElement.childNodes[1].nodeTypeString === "text");

关于javascript - 是否可以检测 IE 何时忽略 xml 文档中的空白文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11147792/

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