Actually,simplicity is not simple

速记: 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让我很郁闷。真郁闷!

日志信息 »

该日志于2010-05-30 15:10由 asins 发表在Develop分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过评论 RSS订阅这个日志的所有评论。

相关日志 »

7 条评论

  1. 底里歇斯 底里歇斯 July 13th, 2010 at 07:55 pm

    哎...不懂程序啊....高手啊...像你学习..

  2. chanel watches chanel watches November 18th, 2010 at 02:45 pm

    支持下!!!

  3. coach outlet coach outlet November 18th, 2010 at 02:49 pm

    The world can be changed by man's endeavor, and that this endeavor can lead to something new and better .

  4. cheap coach bags cheap coach bags November 18th, 2010 at 02:50 pm

    支持下!!

  5. Janell25Lawson Janell25Lawson December 6th, 2010 at 09:42 am

    Do you understand that it's high time to receive the credit loans, which can realize your dreams.

  6. cheap timberland boots cheap timberland boots December 8th, 2010 at 12:30 am

    good..

  7. 工仔 工仔 January 6th, 2011 at 08:47 pm

    写得很好。。。非常明白

发表评论 »

captcha
请输入验证码