jQuery是一個(gè)非常受歡迎的JavaScript庫(kù),它提供了很多方便的方法來(lái)操作DOM。其中一個(gè)方法就是append,它的作用是在一個(gè)元素的結(jié)尾添加一個(gè)或多個(gè)子元素。接下來(lái)我們來(lái)看看append方法的源碼實(shí)現(xiàn)。
// jQuery.fn是jQuery的原型對(duì)象,通過(guò)給原型對(duì)象添加方法來(lái)擴(kuò)展jQuery jQuery.fn.extend({ // 定義append方法 append: function() { // 獲取參數(shù),將其轉(zhuǎn)化成數(shù)組 var dom = arguments, len = dom.length, i = 0, j = this.length; for (; i< len; i++) { for (var k = 0; k< j; k++) { // 在每個(gè)元素的結(jié)尾添加HTML字符串或DOM元素 typeof dom[i] === "string" ? this[k].insertAdjacentHTML("beforeend", dom[i]) : dom[i].nodeType && this[k].appendChild(dom[i]); } } return this; } });
首先我們會(huì)看到j(luò)Query.fn.extend方法,這個(gè)方法是用來(lái)擴(kuò)展jQuery原型對(duì)象的方法。它的作用是將傳遞進(jìn)來(lái)的對(duì)象的屬性和方法拷貝到j(luò)Query.fn中。
append方法接收不定數(shù)量的參數(shù),因此使用arguments來(lái)獲取所有參數(shù)。由于參數(shù)在JavaScript中并不是真正的數(shù)組,需要將其轉(zhuǎn)換成數(shù)組。然后通過(guò)for循環(huán)將每個(gè)參數(shù)添加到每個(gè)元素的結(jié)尾。這里使用了兩個(gè)for循環(huán)來(lái)分別遍歷參數(shù)和元素。
在每個(gè)元素的結(jié)尾添加HTML字符串或DOM元素的方法有所不同。如果傳遞進(jìn)來(lái)的參數(shù)是一個(gè)字符串,使用insertAdjacentHTML方法將該字符串插入元素的結(jié)尾。如果是一個(gè)DOM對(duì)象,則使用appendChild方法將該DOM對(duì)象添加到元素的結(jié)尾處。
最后,將this返回是為了實(shí)現(xiàn)方法的鏈?zhǔn)秸{(diào)用。
以上就是jQuery append方法的源碼實(shí)現(xiàn),通過(guò)這段代碼我們可以了解到該方法的底層實(shí)現(xiàn)是如何工作的。