0

需要在这里进行干预,因为我对这个 0_o 几乎失去了理智

我正在使用 IE 9 并且正在使用 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>

上面的代码正确警告:首先:

<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 class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">sometext,<div class="Some_Inner_Div_Class">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>
  • 现在注意到缺少的引号了吗?
  • 现在注意到“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>

所以看起来它现在甚至没有将字符串拆分成一个数组 - 不知道为什么,就像它不再是一个字符串一样。

如果我现在使用开发人员工具 (f12) 并保持“浏览器模式”IE8 并将“文档模式”也切换到 IE9 - 它再次正常工作......

所以非常感谢比尔盖茨再次让我感到困惑0_O

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

同时:

  • 谁能告诉我这是否会在 IE8 中正常工作?
  • 为什么要去掉引号?
  • 为什么不在开发人员工具测试模式下创建数组?

谢谢大家 : )

4

2 回答 2

2

简短的回答:

这是一个兼容性问题。JScript 5 引擎 (IE7/IE8) 存在严重缺陷,这是它所做的事情之一(从属性中去除s 并在生成字符串"时更改大小写)。innerHTML同样,因为innerHTML大写的螺丝,它试图将你.split("</div>");的字符串与包含</DIV>和失败的字符串相匹配。

尝试.split(/<\/div>/i);改用。这不会解决"s 从您的属性中丢失的问题,但它是部分修复。如果需要引号,请参阅此答案以获取似乎可以修复缺少的引号和大写的功能。


在如何针对旧版本的 IE 进行测试的更大问题中:

本质上,浏览器模式对 Internet Explorer 如何呈现页面1没有任何作用。浏览器模式影响 IE获取页面的方式,改变发送到服务器的 UserAgent。

文档模式更改Trident 渲染引擎的版本,以及是使用IE9 Chakra Javascript 引擎还是使用 JScript 引擎的 IE8/IE7 变体

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

[1] 浏览器模式还影响浏览器如何解释条件注释,以及默认的文档模式(使其与浏览器模式相匹配),因此仅更改它是确定 IE8 将如何解释页面的好方法......但是这个如果您有 X-UA-Compatible Meta 标签,行为会很快中断,所以如果您使用这些标签,只需将 Document Mode 设置为匹配。

于 2012-12-08T00:26:12.930 回答
0

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

我认为这段代码在 IE8 中可以正常工作。

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

于 2012-12-07T22:22:57.490 回答