所以,我正在一些书籍的帮助下自学jQuery,而且我现在被一个看似简单的问题困扰了。为什么$('div.foo').length
的值为0?页面中存在div
元素,那么$('div.foo').length
为什么不评估为1?
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" type="text/javascript">
</script>
<script type="text/javascript">
document.write($(div.foo).length);
</script>
<body>
<div class="foo"></div>
</body>
</html>
答案 0 :(得分:2)
document.write($(div.foo).length)
应该是
document.write($("div.foo").length);
此外,您的脚本将在加载DOM之前运行,因此请尝试将JavaScript封装在jQuery中$(document).ready
- 设置http://docs.jquery.com/Tutorials%3AIntroducing_%24(document).ready()
答案 1 :(得分:1)
你错过了引号
document.write($("div.foo").length);
编辑:
布拉德提出了一个很好的观点。你应该在document.ready
中打包这个电话
$(document).ready(function() {
document.write($("div.foo").length);
});
答案 2 :(得分:0)
简单:尚未加载DOM。
您有两种选择:
</body>
标记之前,以便加载文档元素,因此jQuery可以看到对象。$(document).ready(function(){ ...code... })
(或简写$(function(){ ...code... })
,因此大括号内的代码仅在文档加载后执行。尝试这两个尺寸:
重新订购执行:
<html>
<head>
<script src="jquery.js"></script>
</head>
<body>
<div class="foo">
<script>
alert($('.foo').length);
</script>
</body>
</html>
等待加载的DOM *
<html>
<head>
<script src="jquery.js"></script>
<script>
$(document).ready(function(){
alert($('.foo').length);
});
</script>
</head>
<body>
<div class="foo">
</body>
</html>
答案 3 :(得分:0)
您必须在创建dom元素后移动此代码,方法是在body
标记之前移动它。目前,您甚至在DOM中创建元素之前都尝试访问它们。
<script type="text/javascript">
document.write($('div.foo').length);
</script>
或强>
在DOM准备就绪后运行代码,即所有元素都在DOM中创建。
//this piece of code can be placed even before elements are created
$(function(){
//this code here, will run after DOM is ready
});
答案 4 :(得分:0)
未加载DOM。使用
$(document).ready(function() {
alert($('div.foo').length);
});