IE测试Javascript“;“浏览器模式”&引用;“文档模式”;快把我逼疯了!这是浏览器兼容性问题还是正在发生什么
这里需要干预,因为我在这件事上几乎失去了理智 我正在使用IE9和IE的F12开发工具,试图测试IE8。 我正在用JavaScript执行一项非常简单的任务 我正在抓取一些内部html——无论出于什么原因,都将其用作一个陷阱 像这样: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
<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中是否能正常工作吗
- 为什么要去掉引号
- 为什么不在开发人员工具测试模式下创建阵列
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>