2017-02-20 98 views
0
var p = $("<p>1111111</p><p>1111111</p>"); 
var _p = p[0] 

我們知道,當我們執行p [0]時,我們得到一個原始的js dom對象。是[]建築運營商還是其他什麼?jQuery如何實現[]

如何擁有自己的Object支持[]運算符?

回答

0

通過按指數手動分配項目,您可以使用JavaScript實現相同的結果。
這樣,您將擁有自定義對象成員/屬性和索引值。

var $ = function(selector) { 
 
    function ctor(items) { 
 
    this.count = function() { 
 
     return items.length; 
 
    }; 
 
    
 
    this.get = function(ind) { 
 
     return items[ind]; 
 
    }; 
 

 
    this.log = function() { 
 
     for (var i = 0; i < items.length; i++) 
 
     console.log("Item " + i + ": " + items[i].outerHTML); 
 
    }; 
 
    
 
    for (var i = 0; i < items.length; i++) 
 
     this[i] = items[i]; 
 
    } 
 
    
 
    var items = document.querySelectorAll(selector); 
 
    return new ctor(items); 
 
}; 
 

 
var $divs = $("div"); 
 
console.log("Count = " + $divs.count()); 
 
console.log($divs[0].innerText); 
 
console.log($divs.get(1).innerText); 
 
$divs.log();
<div id="div1">1</div> 
 
<div id="div2">2</div> 
 
<div id="div3">3</div>

+0

感謝您的明智建議, $ divs [0]是另一個概念$ divs.0,這裏0只是一個屬性$ divs是我嗎? – rex

+0

@rex確切地說,想法是對的,只有一句話 - 「$ divs.0」在語法上不正確。 –

0

[]代表一個數組,不是特別限定在Jquery中。當你使用Jquery選擇器時,它將一組匹配的元素作爲一個數組返回(幾乎等於本地數組)。你顯示的零是一個數組索引,這意味着獲得第一個匹配的元素。

+1

JQuery的選擇不返回數組。他們返回一個類似數組的JQuery對象。 –

+0

@RobbyCornelissen是的,該對象是可迭代的,並且alomst等於本地數組。 –