【发布时间】:2011-11-22 21:43:06
【问题描述】:
假设您有一个动态加载内容的简单网页,如下所示:
- main.html -
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript"
src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.2.js">
</script>
<script type="text/javascript">
$(function() {
$.ajax({
type: 'get', cache: false, url: '/svc.html',
success: function(h) {
$('#main').html(h);
}
});
});
</script>
</head>
<body>
<div id='main'>
loading...
</div>
</body>
</html>
并且它加载的页面在单独的文件中使用了一些 Javascript:
- svc.html -
<script type="text/javascript"
src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.6.2.js">
</script>
<script type="text/javascript" src="/plugin.js" css="/plugin.css"></script>
<div id='inner'>
dynamically loaded content
</div>
注意脚本标签上的css 属性——它表示属于脚本的样式表,脚本将为我们加载该样式表。这是脚本:
- plugin.js -
var css = $('<link />', {
rel: "stylesheet", type: "text/css", href: $('script:last').attr('css')
});
$('head').append(css);
最后是样式表,它只是为加载的inner div 着色,以证明一切正常:
- plugin.css -
#inner
{
border: solid 1px blue;
}
现在,您会注意到样式表的加载方式:我们查看$('script') 并选择最后一个,然后我们获取css 属性并将link 项附加到文件。
我可以访问 /svc.html 并且 javascript 运行,加载我的样式表,一切都很酷 - 但是,如果我访问 /main.html,javascript 运行但无法在数组中找到 plugin.js 的加载$('script')(因此无法加载样式表)。请注意,插件脚本会运行,只是看不到自己。
这是一个错误吗? jQuery AJAX 方法的限制? $('script') 不应该反映 所有 已加载的脚本吗?
* 编辑 *
在哭泣和咬牙切齿之后,我决定采用 Kevin B 的解决方案,但是,我无法让它工作,主要是因为 plugin.js 代码在 scriptNode 被插入时运行,但是在插件代码中,该节点尚未插入,因此在 $('script') 数组中不可用 - 所以我仍然是 SOL。我把所有的代码都放在这里了:
【问题讨论】:
标签: javascript jquery jquery-selectors