速记: jQuery两DOM比较
今天在写基于jQuery的一项目时遇到的问题,先看代码:
var a = $('#sR_Tab');
var b = $('#sR_Tab');
console.log(a == b); // return false
看到测试返回的值第一时间我感到很差异,但细想下后就明白了,用jQuery有几年了,居然到现在才注意到这问题,失败啊!
在这也给自己理一理吧,再让自己记牢点。
看到上面测试如果还不能想明白的可以测试以下代码:
var a = $('#sR_Tab');
console.log(typeof a); // return object
结果返回说是Object类型,实际上a是个Array类型的Object,在JS类型中没有这种说法,但切能很让我们很清楚的了解这变量的真正类型,谁叫JS的类型总是含糊不清的。
明白上面的a是个Array类型的Object后就能很好的解释为什么a != b了。在JS的变量中,Array、Object类型的变量其值是指向数据的指针,而非数据本身。而jQuery的$()函数是会返回一个全新的Array类型的Object。所以虽然a、b变量的值是指向不同空间的地址,其值自然不同。
那要如何才能返回真正的比较结果呢?其实jQuery中的$()函数返回的是所选DOM的数组,所以只要得到真正DOM的引用进行比较就能得到我们真正要的比较结果,写法也很简单:
var a = $('#sR_Tab');
var b = $('#sR_Tab');
console.log(a[0] == b[0]); // return true
呵呵,就这么简单。只是到现在才注意到两jQuery对象比较返回的结果是false让我很郁闷。真郁闷!
7 条评论 ▼
哎...不懂程序啊....高手啊...像你学习..
支持下!!!
The world can be changed by man's endeavor, and that this endeavor can lead to something new and better .
支持下!!
Do you understand that it's high time to receive the credit loans, which can realize your dreams.
good..
写得很好。。。非常明白