Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以检测IE何时忽略xml文档中的空白文本节点?_Javascript_Xml_Internet Explorer_Dom - Fatal编程技术网

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

Javascript 是否可以检测IE何时忽略xml文档中的空白文本节点?,javascript,xml,internet-explorer,dom,Javascript,Xml,Internet Explorer,Dom,我正试图为IE XML DOM库的属性编写一个垫片,但是我遇到了一个关于格式化空白的问题 如果我处理以下XML的text属性 var doc1=load_ie('AB') var doc2=荷载(A和B); 它们给出了不同的结果: doc1.text//'AB' doc2.text/‘A B’-将多个空格压缩为单个空格 然而,令我惊讶的是,IE似乎并不承认x2中存在的空格,就像其他浏览器一样: doc1.documentElement.childNodes.length//2 doc2.do

我正试图为IE XML DOM库的属性编写一个垫片,但是我遇到了一个关于格式化空白的问题

如果我处理以下XML的text属性

var doc1=load_ie('AB')
var doc2=荷载(A和B);
它们给出了不同的结果:

doc1.text//'AB'
doc2.text/‘A B’-将多个空格压缩为单个空格
然而,令我惊讶的是,IE似乎并不承认x2中存在的空格,就像其他浏览器一样:

doc1.documentElement.childNodes.length//2
doc2.documentElement.childNodes.length//2(我预期为3!)
var doc3=荷载(A、c、B);
doc3.documentElement.childNodes.length//3
如果我在Google chrome上运行测试,doc2案例中的节点数是3(“a”节点,一个有3个空格的文本节点和“b”节点),类似于doc3案例的工作方式如果IE对我隐藏空白节点,并且我无法区分第一种和第二种情况,即使它们需要返回不同的结果,我如何才能编写垫片?


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

load\u ie=function(xmlstr){
var doc=新的ActiveXObject('Microsoft.XMLDOM');
doc.async=false;
doc.loadXML(xmlstr);
退货单;
}
load_w3c=函数(xmlstr){
var p=新的DOMParser();
返回p.parseFromString(xmlstr,'text/xml');
}
奖金问题:

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

var d=load\u ie(
“\n”+
'a\n'+
“\n”+
“\n”+
“\n”+
“e f\n”+
''
);
d、 文本;
应该给

“a cdata d e f”
但是我得到了

“a cdata数据\n e f”

我想知道我是否遗漏了一些明显的东西,导致了我这一部分的奇怪行为。

Internet Explorer解析方法使用MSXML API,可以将其配置为。以下代码在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");
load\u ie=function(xmlstr){
var doc=新的ActiveXObject('Microsoft.XMLDOM');
doc.async=false;
doc.preserveWhiteSpace=true;
doc.loadXML(xmlstr);
退货单;
}
var doc=加载(即“A B”);
console.log(doc.documentElement.text.length==5)
console.log(doc.documentElement.childNodes.length==3);
console.log(doc.documentElement.childNodes[1].nodeTypeString==“text”);

我认为可以将XML解析器配置为折叠空白或不折叠空白。也许XMLDOM对象的默认设置在文档编写时和现在之间发生了变化。]@millimoose:我认为我无法更改设置以防止删除空白-我只是为了避免破坏一个遗留应用程序而遇到这种麻烦,我担心我会破坏一些东西(我很确定默认设置始终是忽略只有空格的节点)尽管如此,我仍然对IE如何以不同的方式处理被忽略的案例感到困惑,尽管我显然无法检测到空白被忽略了……但当前的应用程序没有保留空白,因此我担心这一更改可能会破坏某些东西。也就是说,如果没有其他方法来消除doc1和doc2案例之间的歧义,那么我会可能不得不求助于此。我真的不知道您希望垫片有什么确切的行为(或者它与
innerText
,以及
textContent
)据我所知,“保存”或“吞咽”有什么不同空白是你在这里唯一的选择。你可以做的就是让你的垫片按照你的应用程序所期望的方式折叠空白。现在我想起来了,我还是需要使用保留空白,因为其他浏览器不支持忽略空白。这可能会行得通。我面临着同样的问题,请有人在是??使用preserveWhiteSpace=true不起作用我想要就像在Firefox中为空白创建文本节点一样IE也应该为每个空白创建文本节点原因是如果有两个标记,则在渲染时忽略a和B之间的空白这是因为Firefox在此处创建了三个标记a、B和其他TextNode TextNode有空的空格,但在IE的情况下没有创建这样的textnode。请建议一个solution@user593029这应该是一个新问题,最好措辞更清楚。