[英]jquery - loading inline javascript via AJAX
我已经把一个快速的原型拼凑起来试图建立一些关于内联JavaScript在加载AJAX时可以做什么的非常基本的事实:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$('p').css('color','white');
alert($('p').css('color'));
// DISPLAYS FIRST but is "undefined"
$(document).ready(function(){
$('#ajax-loaded-content-wrapper').load('loaded-by-ajax.html', function(){
$('p').css('color','grey');
alert($('p').css('color'));
// DISPLAYS LAST (as expected)
});
$('p').css('color','purple');
alert($('p').css('color'));
// DISPLAYS SECOND
});
</script>
<p>Content not loaded by ajax</p>
<div id="ajax-loaded-content-wrapper">
</div>
</body>
</html>
<p>Some content loaded by ajax</p>
<script type="text/javascript">
$('p').css('color','yellow');
alert($('p').css('color'));
// DISPLAYS THIRD
$(document).ready(function(){
$('p').css('color','pink');
alert($('p').css('color'));
// DISPLAYS FOURTH
});
</script>
<p>Some content loaded by ajax</p>
<script type="text/javascript">
$(document).ready(function(){
$('p').css('color','blue');
alert($('p').css('color'));
// DISPLAYS FIFTH
});
$('p').css('color','green');
alert($('p').css('color'));
// DISPLAYS SIX
</script>
<p>Some content loaded by ajax</p>
a)以上所有(除了第一个)成功地改变了所有段落的颜色(在firefox 3.6.3中)。
b)我使用alert
而不是console.log
因为在' console.log
中调用时,控制台是undefined
。
$(document).ready()
不会将'加载'HTML视为新文档,或重读整个DOM树,包括加载的HTML,在AJAX加载的内容中毫无意义 我是否正确地从我的测试中得出这些“真理”(测试有效性)?
如果没有,你会如何测试这些?
我们可以将它缩小到一个更简单的事实: 所有.load()
函数都会向页面添加内容 。
关于#1,文档已经加载,所以不,你没有加载一个全新的文档。 您只是在已经存在的文档中间添加内容。 但是,节点确实被添加到您要求添加它们的DOM中。 这不需要“重读整个DOM树”,但效果是一样的。
你在#2上是正确的:你注入页面的任何JavaScript都绝对会影响页面上的任何内容,包括它的样式。 新加载的脚本无法知道之前有哪些元素,哪些元素是新的; 它只是看到了目前存在的DOM。
你在#3上同样正确。 jQuery在页面上,新脚本不知道它是单独加载的。 它只是在您的页面上执行的代码。
你在#4上错了。 Firebug是分析页面当前内容的绝佳工具,无论它是如何实现的。 您将始终在Firebug中看到当前的DOM,它甚至会突出显示(黄色)任何实时更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.