书上说" $('tt')获取的永远是对象,因此要用jQuery检查某个元素在网页上是否存在时,不能用以下代码“if($("#tt")){do something...} 然后我把do something换成了alert($("#tt"))弹出的是"object Object" 如果是这样if($("#tt")[0]) alert($("#tt")[0]) 弹出的是"object HTMLpElement " 这要怎么理解呢?qaq
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
用jQuery去检索元素,即使没找到,也会返回一个包装集为
document(根元素)的jQuery对象,既然是对象,if判断就为true,要判断元素是否存在,请:$美元符号函数返回的是jQuery对象的封装,记住jQuery对象也是对象。而$()[0]获取的是单个元素,则是浏览器JS自支持的HTML对象,当然,它也还是对象就是。在JS中有一句话叫做“一切皆为对象”。jQuery对象即为javascript对象的一个数列,而数列本身也是javascript对象的一种。以上确实错了,主要是没仔细看过jQuery源码的原因。。。
update:
jQuery对象即为javascript对象的一个类数组对象,而类数组对象本身也是javascript对象的一种。上面两位讲了 js的原理,我觉得你的疑问是在
if($("#tt")){do something...}为什么不能用 这个判断。是因为jQuery的原因,每次jQuery操作完毕之后,返回的不是一个单纯的你所想的字符串一样的东东,而是一个jQuery对象。这个对象会包含很多东西,包括你后面用的
$("#tt")[0]。是原始HTML对象元素。还有其他很对,这个你可以console.log($('#tt'))来看看。所以你如果想判断当前元素有没有加载进来。可以用$('#tt').length。jquery的一种预防报错的机制,防止获取到不存在的元素的时候会报错,默认的一种方式,如果要判断是否有这个元素,侧需要判断这个元素的长度
jQuery对象可以看做数组的封装。
即使没有
#tt,也会返回一个jQuery对象,只不过这个jQuery对象是空的罢了。所以你取它的
length属性就可以知道有没有。有的函数则不是,例如找不到结果的时候返回
undefined而不是一个空数组。囧..
大概是这个.
好像以前听人说过, jquery很乖的, 他返回的不是 单纯的 节点, 而是在节点外面又加了一层自己的包装.
包装的[0] 位置, 放的才是真的想要的.
大概就是, 船上拉的都是集装箱, 就这么理解就差不多了.