Javascript IE8DOM不反映JS更改

Javascript IE8DOM不反映JS更改,javascript,dom,internet-explorer-8,Javascript,Dom,Internet Explorer 8,我正在使用javascript对页面提供时已经存在的HTML元素进行一些简单的更改(例如更改div元素的背景图像、添加ID等)。这当然适用于除IE8之外的所有浏览器,IE8中的更改似乎没有反映在DOM中,因此当我在JS运行后解析DOM时,它找不到我要查找的元素。该页面由2个javascript文件组成,其中1个是外部第三方脚本,我无法控制它,但它添加了ID和背景图像。第二个是我的,它在第一个之后被调用,正在解析文档,寻找具有新ID的特定元素。两者都是外部脚本,不在HTML源代码中内联 据我所知,

我正在使用javascript对页面提供时已经存在的HTML元素进行一些简单的更改(例如更改div元素的背景图像、添加ID等)。这当然适用于除IE8之外的所有浏览器,IE8中的更改似乎没有反映在DOM中,因此当我在JS运行后解析DOM时,它找不到我要查找的元素。该页面由2个javascript文件组成,其中1个是外部第三方脚本,我无法控制它,但它添加了ID和背景图像。第二个是我的,它在第一个之后被调用,正在解析文档,寻找具有新ID的特定元素。两者都是外部脚本,不在HTML源代码中内联

据我所知,它是:

  • 在竞争条件下,2个外部Java脚本正在运行1个正在更改按钮并添加ID,另一个正在解析dom以查找特定的元素,当它们同时运行时,第二个脚本从未找到元素
  • 在进行更改后,IE8无法正确刷新DOM
My JS在头中的第一个JS之后被调用,因此您可以假设阻塞不会导致竞争条件,并且元素在My JS运行之前是可用的

我尝试过的事情:

  • 我尝试在代码运行之前向主体添加一个类来强制刷新DOM
  • 我使用过IE8开发工具,ID和元素不存在,但如果我刷新几次,它们就会神奇地出现(此时页面已经完全加载,我可以与它完全交互)
有什么想法吗


谢谢

需要记住的一件事是,当您创建多个
标记时,您不能保证它们的加载顺序,这取决于它们的构建方式-它们通常会在加载后立即开始处理

因此,如果要将一个本地文件和一个文件包含到CDN,例如:

<script type="text/javascript" 
        src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="text/javascript" src="/js/my_script.js"></script>
<script type="text/javascript" src="/js/my_relied_upon_script.js"></script>
<script type="text/javascript" src="/js/my_reliant_script.js"></script>
只有先加载本地文件
/js/my_script.js
,您的页面才会工作-这不太可能,因为另一个文件是由专用CDN提供的

如果两个文件都在本地提供,则情况更糟,例如:

<script type="text/javascript" 
        src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script type="text/javascript" src="/js/my_script.js"></script>
<script type="text/javascript" src="/js/my_relied_upon_script.js"></script>
<script type="text/javascript" src="/js/my_reliant_script.js"></script>
现在,请记住,上面的转换相当糟糕,并且不是您想要做的事情(例如,通常是内联CSS之类的),但是它们给出了一个示例。因为
Script#2
要求
.wrapper
元素在运行之前存在,所以需要确保它发生在
Script#1
发生之后


在本例中,我们是通过
触发文档上的自定义事件来实现这一点的,然后我们可以对其进行响应,并且只有在DOM处于正确状态后才会触发该事件。

您好,感谢您提供的信息性回答。因此,JS文件的顺序是:您好,谢谢您提供的信息性答案。因此,JS文件的顺序是:JS_添加_ID(加载时调用)JS_解析_ID(加载时调用)。有没有办法强制订单,或者这完全取决于为请求提供服务的web浏览器?不幸的是,对于这个项目来说,使用JQuery不是一个选项。我想您可以让第一个脚本加载第二个脚本——但这有点恶心。你可以在网站上找到一个例子。您还可以考虑使用<代码> SETTIMEOUT循环来检查IDS是否已经创建,或是什么。如果您同时控制这两个脚本,最好的解决方案可能是将它们合并/缩小为一个小文件——按照正确的顺序。这可能是最简单和最安全的。