gpt4 book ai didi

javascript - HEAD 中 LINK 和 STYLE 元素的评估顺序

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:33 26 4
gpt4 key购买 nike

在我看来,所有现代浏览器,包括最新版本的 Chrome、Safari 和 FireFox(可能从一开始就)都遵守 stylelink 元素的顺序头部;即使在运行时使用 JavaScript 动态创建和添加。

比如这里的red.cssgreen.css都指定了body的背景色;第一个将主体背景设置为红色,第二个将其设置为绿色:

<head>
<!-- other code -->
<link rel="stylesheet" href="red.css" type="text/css">
<link rel="stylesheet" href="green.css" type="text/css">
</head>

结果是正文的背景颜色是绿色,因为 green.css 放在 red.css 之后并在之后计算。

即使 link 元素是动态创建并插入到头部的,元素的顺序似乎也是正确的。例如,动态创建一个加载 green.csslink 元素,如果它被插入到 red.css 之后,只会将主体背景颜色设置为绿色.

然而,唯一似乎不遵守这一点的浏览器是 Internet Explorer(至少 IE 7-9 不遵守)。似乎在 IE 中,最近添加的 linkstyle 元素在已经被评估的所有内容之上被评估;在运行时添加时,它不遵守树顺序。

遵守顺序是非标准行为,还是 Internet Explorer 错误?我如何为 Internet Explorer 修复此问题?

我想出的一个想法(行之有效)是动态删除所有现有的 linkstyle 元素,然后以相同的树顺序将它们添加回来——是我希望他们被评估的顺序。

如有任何见解,我们将不胜感激。

更新

根据要求,这里有一个更详细的代码示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="red.css" type="text/css"> <!-- sets red -->
</head>
<body>

<script type="text/javascript">

setTimeout(function() {

// IE7-8 does not support referencing document.head
var head = document.getElementsByTagName("head")[0];

var link = document.createElement("link");
link.setAttribute("href", "green.css");
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");

// All modern browesers will leave the background
// color red, except IE will set it green.
head.insertBefore(link, head.firstChild);

// Now comment out the above line and try adding the link
// using this instead. All modern browsers (including IE)
// will set the body background color green after two seconds.
// IE seems to always evaluate the last dynamically added link.

// head.appendChild(link);

}, 2000);

</script>

</body>
</html>

red.css 的内容:

body { background-color: red; }

green.css 的内容:

body { background-color: green; }

最佳答案

如果您不重新附加样式表,而是切换他们的属性以强制重新呈现,会怎样?例如,您可以尝试遍历所有 link/style 元素,将它们的 media 属性设置为 none,然后将其重新设置回原来的状态。

关于javascript - HEAD 中 LINK 和 STYLE 元素的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12240920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com