IE测试Javascript“;“浏览器模式”&引用;“文档模式”;快把我逼疯了!这是浏览器兼容性问题还是正在发生什么

IE测试Javascript“;“浏览器模式”&引用;“文档模式”;快把我逼疯了!这是浏览器兼容性问题还是正在发生什么,javascript,internet-explorer-8,internet-explorer-9,ie-developer-tools,Javascript,Internet Explorer 8,Internet Explorer 9,Ie Developer Tools,这里需要干预,因为我在这件事上几乎失去了理智 我正在使用IE9和IE的F12开发工具,试图测试IE8。 我正在用JavaScript执行一项非常简单的任务 我正在抓取一些内部html——无论出于什么原因,都将其用作一个陷阱 像这样: <div id="Some_Container_div"> <div class="Some_Inner_Div_Class">sometext</div> <div class="Some_Inner_D

这里需要干预,因为我在这件事上几乎失去了理智

我正在使用IE9和IE的F12开发工具,试图测试IE8。 我正在用JavaScript执行一项非常简单的任务

我正在抓取一些内部html——无论出于什么原因,都将其用作一个陷阱

像这样:

<div id="Some_Container_div">

    <div class="Some_Inner_Div_Class">sometext</div>
    <div class="Some_Inner_Div_Class">sometext</div>
    <div class="Some_Inner_Div_Class">sometext</div>

</div>


<script>

var Div_Contaiers_Inner_Html_As_String = document.getElementById('Some_Container_div').innerHTML;

alert(Div_Contaiers_Inner_Html_As_String);

Array_Of_Divs = Div_Contaiers_Inner_Html_As_String.split("</div>");

alert(Array_Of_Divs);

</script>

一些文字
一些文字
一些文字
var Div_Contaiers_Inner_Html_As_String=document.getElementById('Some_Container_Div').innerHTML;
警报(Div_Contaiers_Inner_Html_As_String);
数组\u Of\u Divs=Div\u Contaiers\u Inner\u Html\u As\u String.split(“”);
警报(数组/分区);

上述代码正确地提醒: 第一:

sometextsometext
然后,第二个警报会通知适当的阵列:

<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,
sometext,sometext,sometext,


如果我现在使用开发者工具(f12)并切换到“浏览器模式”IE8,并且我也将“文档模式”切换到IE8,则浏览器现在会发出警报:

第一:

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>
sometextsometext
  • 现在注意到缺少的引号了吗?
  • 现在注意到单词“DIV”的大小写了吗?
接下来,它会提醒同样的事情:

<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>
sometextsometext
所以现在看起来它甚至没有将字符串拆分成数组-不知道为什么,就像它不再是字符串一样

如果我现在使用开发工具(f12)并保持“浏览器模式”IE8,同时将“文档模式”也切换到IE9,那么它又可以正常工作了

非常感谢比尔·盖茨再次让我困惑

无论如何-所以我在这里寻找帮助-我看到一些人说,当使用开发人员工具进行测试时,您应该将“浏览器模式”切换到IE8,将“文档模式”也切换到IE8-但我没有看到我理解的解释。如果只切换一个或两个,会有什么区别

同时:

  • 有人能告诉我这在IE8中是否能正常工作吗
  • 为什么要去掉引号
  • 为什么不在开发人员工具测试模式下创建阵列
感谢大家:)

很遗憾,“IE8浏览器模式”和IE8是完全不同的东西:/

我认为这段代码在IE8中可以很好地工作

顺便说一下,您可以使用免费工具,这比“浏览器模式”要好得多。

简短回答: 这是一个兼容性问题。JScript 5引擎(IE7/IE8)存在严重缺陷,这是它所做的事情之一(在生成
innerHTML
字符串时,从属性中剥离
并更改大小写)。此外,由于
innerHTML
使用大小写,它试图匹配
拆分(“”);
针对包含
且失败的字符串

尝试改用
.split(//i);
。这不会解决属性中的
丢失问题,但这是一个部分修复。用于修复缺少引号和大写(如果需要引号)的函数


在关于如何针对旧版本IE进行测试的大问题中: 实际上,浏览器模式对Internet Explorer呈现页面的方式没有任何影响1。浏览器模式影响IE获取页面的方式,更改发送到服务器的UserAgent

文档模式会更改所使用的内容以及是否使用

TL;DR,出于测试目的,您应该将浏览器模式更改为IE8,然后观察文档模式是否默认为IE8标准或怪癖。如果代码不起作用,请在两者之间切换。如果代码正常工作,请确保为任何工作模式()设置了适当的DOCTYPE


[1] 浏览器模式还影响浏览器解释条件注释的方式,以及默认文档模式(使其与浏览器模式匹配),因此仅更改此模式是确定IE8将如何解释页面的好方法。。。但是,如果您有与X-UA兼容的元标记,这种行为很快就会中断,因此如果您正在使用这些元标记,只需将文档模式设置为匹配即可。

非常感谢这一点-还有:var Div_Contaiers_Inner_Html_As_String=Document.getElementById('Some_Container_Div')。innerHTML.toLowerCase();这也立即导致split()函数起作用-保留引号不是一个简单的答案吗?以字符串形式访问ChildNode是否可以避免引号问题?甚至不确定这是否可能。你激发了我的好奇心。晚点回来!简言之,没有。没有简单的答案。IE8对元素对象的实现令人伤心。无法生成字符串
标记名
属性[i]。名称
/
.value
,因为
属性
数组的长度统计每个属性,而不仅仅是HTML设置的属性。。。如果不将复杂性增加到可怕的程度,就无法筛选出“默认”属性值。。。这真是一团糟。我想这可能是你可以用来达到你想要的效果的最简单的功能了/
<DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV><DIV class=Some_Inner_Div_Class>sometext</DIV>