背景故事
我正在创建一个web应用程序,其中通过jQuery.load
函数"加载"各个页面。最初加载的页面是一个单独的文件,但随着时间的推移,我决定将其拆分为.html文件、.css文件和.js文件。
奇怪的是,在css
中使用百分比值定位的元素周围出现了一个设计缺陷。为了查看我在移动时是否修改了样式,我替换了style
标记(而省略了link
标记),它运行良好。第四次和第四次,我了解到只有当我使用link
标签而不是通过style
标签嵌入它时,它才会严格发生。
我想使用link
标签,所以我试图缩小问题范围。经过一段时间的摆弄,我找到了.js文件,特别是$(document).ready
上.focus
函数的用法。如果我评论掉.focus
,一切都很好。不和解,它就破裂了。
这似乎只在Chrome中发生。它不会出现在FF26或IE11中。
示例
小提琴。
请注意,该问题仅发生在Chrome中,并且必须禁用缓存。由于Chrome的临时缓存禁用不会扩展到iframe中的iframe,因此直接的结果更容易处理。
<script>
$(document).ready(function() {
$('#content').load('html/portal.html', function() {
//now i can operate on elements loaded from html/portal.html
//they have been inserted into the DOM
$('input#input').focus();
})
});
</script>
至于对链接元素的引用,如果你想使用javascript从外部url动态加载样式表,你可以使用这样的javascript函数:
//load deferred stylesheets
function loadStyleSheet(src) {
if (document.createStyleSheet) {
document.createStyleSheet(src);
} else {
$("head").append($("<link rel='stylesheet' href='"+src+"' type='text/css' media='screen' />"));
}
}
如果你想加载一个外部javascript文件,你可以使用jQuery.getScript():
jQuery.getScript('/js/external.js');
因此,将所有这些放在一起,如果您想从外部资源加载一些内容,请将其插入DOM,然后加载外部样式表和外部javascript资源,您可以按如下方式执行:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
$(document).ready(function() {
//function to load a deferred stylesheets
var loadStyleSheet = function(src) {
if (document.createStyleSheet) {
document.createStyleSheet(src);
} else {
$("head").append($("<link rel='stylesheet' href='"+src+"' type='text/css' media='screen' />"));
}
}
$('#someWrapper').load('external-url.html #someWrapper > *', function() {
loadStyleSheet('/css/external.css');
jQuery.getScript('/js/external.js');
})
});
</script>
</head>
<body>
<div id="someWrapper">
<!-- external content is loaded here -->
</div>
</body>
</html>