gpt4 book ai didi

javascript - 动态加载 CSS - jQuery 与纯 Javascript

转载 作者:技术小花猫 更新时间:2023-10-29 11:37:52 26 4
gpt4 key购买 nike

我正在用 java 脚本代码加载 CSS 文件。起初我使用 jQuery 代码。它运行良好,但过了一段时间我意识到 CSS 规则不适用于 IE 浏览器。所以我用谷歌搜索并将其替换为 document.createElement 版本。现在它可以在所有浏览器中顺利运行。有人知道为什么吗?这两种方法有区别吗?

var cssNode = document.createElement('link');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = filename;
cssNode.media = 'screen';
cssNode.title = 'dynamicLoadedSheet';
document.getElementsByTagName("head")[0].appendChild(cssNode);

对比

var $fileref = $("<link />");
$fileref.attr("rel", "stylesheet");
$fileref.attr("type", "text/css");
$fileref.attr("href", filename);
$fileref.attr("media", "screen");
$fileref.attr("title", 'dynamicLoadedSheet');
$('head').append($fileref);

谢谢,帕维尔

附言另一个提示:

$('head').append($fileref);

document.getElementsByTagName("head")[0].appendChild($fileref[0]);

使用第一种 $ 方法加载文件失败,而使用 document.getElement... 有效。所以,这样的事情是可行的:

var $fileref = $("<link />");
$fileref.attr("rel", "stylesheet");
$fileref.attr("type", "text/css");
$fileref.attr("href", filename);
document.getElementsByTagName("head")[0].appendChild($fileref[0]);

有效。

------------------------ 提示 2另一个踢球者:

这个有效:

var $fileref = $("<link />");
$fileref.attr("rel", "stylesheet");
$fileref.attr("type", "text/css");
$fileref.attr("href", filename);
document.getElementsByTagName("head")[0].appendChild($fileref[0]);

这个没有:

var $fileref = $('<link rel="stylesheet" type="text/css" href="' + filename + '" />')
document.getElementsByTagName("head")[0].appendChild($fileref[0]);

最佳答案

jQuery 和其他东西(如 createDocumentFragment)严重依赖 innerHTML 来创建/操作元素,因为它是动态创建/修改页面的最快方式内容。

虽然大多数浏览器都支持 innerHTML,但它不是 W3C 标准的一部分,尽管它在浏览器中的工作相当一致,但它确实带有一些怪癖。

例如,它允许插入无效的 HTML,从而引入难以捕获的错误;删除元素时,它可能会导致与被删除的 DOM 元素关联的事件和数据发生内存泄漏;当使用 innerHTML 创建元素时,尤其是在页面加载时,事件处理程序尚未绑定(bind)到元素,这就是我认为这里发生的情况,因为 link 是一个 < em>special 标签,在事件方面,因为一旦 link 标签被添加到 DOM 中,页面就需要开始下载样式表,并且一旦加载就需要更新自身完成,并且由于没有事件处理程序告诉它,页面不执行任何操作。

因此,尽管 innerHTML 在大多数浏览器中都能完美运行,但它不是 W3C 标准的一部分,最好使用标准 DOM 方法添加这些 special 标签 ( createElement, appendChild 等)

我不是 IE 用户,我无法列出所有使用 innerHTML 创建时有问题的元素,但我知道我在 IE8 中使用 google 的 excanvas 时遇到了问题。 js 无法将自身附加到动态创建的 canvas 元素,我需要重新创建所有使用 jQuery 创建的 canvas 元素(因此innerHTML) 并使用标准 DOM createElement 方法重新创建它们。

这很有趣,因为 Internet Explorer 是第一个拥有 innerHTML 的浏览器(因为 Microsoft 发明了这个属性),而且它也是没有正确实现它的浏览器。

关于javascript - 动态加载 CSS - jQuery 与纯 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872810/

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