国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳談jQuery中的this和$(this)

2024-05-06 16:10:37
字體:
供稿:網(wǎng)友
在使用jquery操作js時,經(jīng)常弄不明白this與$(this)。最近不是很忙,抽空仔細(xì)研究了一下,記錄下來以供在忘記的時候拉出來參考參考!
 
 

網(wǎng)上有很多關(guān)于jQuery的this和$(this)的介紹,大多數(shù)只是理清了this和$(this)的指向,其實它是有應(yīng)用場所的,不能一概而論在jQuery調(diào)用成員函數(shù)時,this就是指向dom對象。

$(this)指向jQuery對象是無可厚非的,但this就是指向dom對象,這個是因為jQuery做了特殊的處理。 

在創(chuàng)建dom的jQuery對象時,jQuery不僅僅為dom創(chuàng)建一個jQuery對象,而且還將dom存儲在所創(chuàng)建對象的數(shù)組中。

 

復(fù)制代碼代碼如下:

elem = document.getElementById(match[2]);  
if (elem && elem.parentNode) {  
  this.length = 1;  
  this[0] = elem;  
}  
  
this.context = document;  
this.selector = selector;  
return this;  

 

 this[0] = elem這條語句就是實現(xiàn)對象數(shù)組。所以javascript是很有意思的語言,使用this訪問時,可以訪問它所指向的對象的成員函數(shù),而其實this又是一個對象數(shù)組。其存放的是dom對象。

先看看 $("p").each() -- 循環(huán)

 

復(fù)制代碼代碼如下:

each: function( callback, args ) {  
        return jQuery.each( this, callback, args );  
    }  

 

 看了each函數(shù)的調(diào)用大家應(yīng)該明白,jQuery.each( this, callback, args );調(diào)用的是對象數(shù)組,而對象的數(shù)組存儲的是dom對象,因此在callback函數(shù)中的this自然是dom對象了

再看看$("p").hide() -- 成員函數(shù)

 

復(fù)制代碼代碼如下:

hide: function() {  
        return showHide( this );  
    },  
 function showHide( elements, show ) {var elem, display,  
        values = [],  
        index = 0,  
        length = elements.length;  
    for ( ; index < length; index++ ) {  
        elem = elements[ index ];  
        if ( !elem.style ) {  
            continue;  
        }  
        values[ index ] = jQuery._data( elem, "olddisplay" );  
        if ( show ) {  
            // Reset the inline display of this element to learn if it is  
            // being hidden by cascaded rules or not  
            if ( !values[ index ] && elem.style.display === "none" ) {  
                elem.style.display = "";  
            }  
            // Set elements which have been overridden with display: none  
            // in a stylesheet to whatever the default browser style is  
            // for such an element  
            if ( elem.style.display === "" && isHidden( elem ) ) {  
                values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );  
            }  
        } else {  
            display = curCSS( elem, "display" );  
            if ( !values[ index ] && display !== "none" ) {  
                jQuery._data( elem, "olddisplay", display );  
            }  
        }  
    }  
    // Set the display of most of the elements in a second loop  
    // to avoid the constant reflow  
    for ( index = 0; index < length; index++ ) {  
        elem = elements[ index ];  
        if ( !elem.style ) {  
            continue;  
        }  
        if ( !show || elem.style.display === "none" || elem.style.display === "" ) {  
            elem.style.display = show ? values[ index ] || "" : "none";  
        }  
    }  
    return elements;  
}  

 

 從上面的代碼可以看出hide行數(shù)其實調(diào)用的是showHide,而傳入的第一個參數(shù)this,并不是dom對象,而是jQuery對象數(shù)組,因此showHide函數(shù)通過循環(huán)此對象數(shù)組獲取每一個dom對象。

最后看看$("p").bind() -- 事件

 

復(fù)制代碼代碼如下:

bind: function( types, data, fn ) {  
        return this.on( types, null, data, fn );  
    },  

 

 

復(fù)制代碼代碼如下:

on: function( types, selector, data, fn, /*INTERNAL*/ one ) {  
        // 此部分代碼省略  
        return this.each( function() {  
            jQuery.event.add( this, types, fn, data, selector );  
        });  
    },  

 

bind函數(shù)調(diào)用的是 on函數(shù),而on函數(shù)又是通過 each函數(shù)實現(xiàn)了jQuery.event.add。因此 jQuery.event.add( this中的this也就是dom對象了。所以事件中的this也就是dom對象了。

以上就是個人對于jQuery中this與$(this)的理解了,如有什么紕漏,請聯(lián)系我或者給我留言


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 祁阳县| 北碚区| 凉山| 秦皇岛市| 旺苍县| 盘山县| 高阳县| 额尔古纳市| 蒲城县| 航空| 曲阳县| 阳东县| 湘阴县| 磐安县| 正定县| 万源市| 金乡县| 嘉鱼县| 达日县| 卢湾区| 龙山县| 洛川县| 长顺县| 马边| 白银市| 峡江县| 德钦县| 泊头市| 安康市| 金溪县| 夏河县| 嘉荫县| 扬中市| 教育| 苍溪县| 略阳县| 江川县| 资源县| 元阳县| 雷山县| 元阳县|