MozTW 討論區 https://forum.moztw.org/ |
|
關於Prototype 1.5 的 $() 函式 https://forum.moztw.org/viewtopic.php?f=13&t=17882 |
第 1 頁 (共 1 頁) |
發表人: | delta [ 2007-03-07, 21:59 ] |
文章主題 : | 關於Prototype 1.5 的 $() 函式 |
Prototype 1.5版本 改良了 $() 函式 ![]() 跟 jQuery 的一樣,可以串接下去 $('Element').method1('String...').method2('????') 我想實作這個函式,可是一直失敗 請問是不是要利用多重繼承呢? ![]() |
發表人: | Amauds [ 2007-03-08, 21:34 ] |
文章主題 : | |
我不懂這些, 不過有個很強的人, 也許問問他可以得到解答. Blogger Hack Tip #2 - Javascript Code Style |
發表人: | legnaleurc [ 2007-03-09, 03:36 ] |
文章主題 : | |
delta 寫: Prototype 1.5版本 改良了 $() 函式
![]() 跟 jQuery 的一樣,可以串接下去 $('Element').method1('String...').method2('????') 我想實作這個函式,可是一直失敗 請問是不是要利用多重繼承呢? ![]() 失敗的訊息是....? |
發表人: | Delta(Guest Mode) [ 2007-03-09, 06:29 ] |
文章主題 : | |
legnaleurc 寫: delta 寫: Prototype 1.5版本 改良了 $() 函式 ![]() 跟 jQuery 的一樣,可以串接下去 $('Element').method1('String...').method2('????') 我想實作這個函式,可是一直失敗 請問是不是要利用多重繼承呢? ![]() 失敗的訊息是....? 找不到這個方法、不然就是沒有定義,真!@#$%^& |
發表人: | kourge [ 2007-03-09, 14:13 ] |
文章主題 : | |
能不能提供一個範例? 像比如說... $$('#sidebar div').addClassName('sidecontent').hide() 就會發生錯誤,因為 $$() 傳回來的是陣列,所以必須: $$('#sidebar div').invoke('addClassName', 'sidecontent').invoke('hide') 另外,如果 $('id') 甚麼都沒傳回(元素不存在)應該也不行。 |
發表人: | delta [ 2007-03-09, 17:02 ] |
文章主題 : | |
kourge 寫: 能不能提供一個範例?
像比如說... $$('#sidebar div').addClassName('sidecontent').hide() 就會發生錯誤, ?. 我要實作類似的東西 ![]() 例如: '#divBox'.toElement().setClassName('style1').position(10,40); |
發表人: | kourge [ 2007-03-09, 22:23 ] |
文章主題 : | |
delta 寫: kourge 寫: 能不能提供一個範例? 像比如說... $$('#sidebar div').addClassName('sidecontent').hide() 就會發生錯誤, ?. 我要實作類似的東西 ![]() 例如: '#divBox'.toElement().setClassName('style1').position(10,40); 像 Prototype 內建是不能 '#divBox'.toElement() 的,除非你加個: String.prototype.toElement = function() { return $(this); }; 那就可以。 假如你要自訂的是可以套在 Element 上的函式,可以直接擴充 Element.Methods 這個物件。別忘了傳回本來的元素。 Object.extend(Element.Methods, { position: function(element, x, y) { //做一點事情,調調位置 return element; } }); |
發表人: | delta [ 2007-03-10, 02:18 ] |
文章主題 : | |
kourge 寫: 假如你要自訂的是可以套在 Element 上的函式,可以直接擴充 Element.Methods 這個物件。別忘了傳回本來的元素。
Object.extend(Element.Methods, { position: function(element, x, y) { //做一點事情,調調位置 return element; } }); 謝謝你的回答 ![]() 可是我不打算使用 Framework 這類的東西完成 ![]() 關於取得 Element 的函式 我已經寫好了,仿 CSS Selector 去取得元素 ![]() 只是沒辦法像 Prototype,可以串接方法、而且方法可以不用照順序接 Ex: Function1('hi').method6().method2('world'); ![]() 看來我的 Level 還很低 ![]() Prototype 的 Element 物件,程式碼還真的有點複雜呢 |
發表人: | kourge [ 2007-03-12, 13:06 ] |
文章主題 : | |
delta 寫: kourge 寫: 假如你要自訂的是可以套在 Element 上的函式,可以直接擴充 Element.Methods 這個物件。別忘了傳回本來的元素。 Object.extend(Element.Methods, { position: function(element, x, y) { //做一點事情,調調位置 return element; } }); 謝謝你的回答 ![]() 可是我不打算使用 Framework 這類的東西完成 ![]() 關於取得 Element 的函式 我已經寫好了,仿 CSS Selector 去取得元素 ![]() 只是沒辦法像 Prototype,可以串接方法、而且方法可以不用照順序接 Ex: Function1('hi').method6().method2('world'); ![]() 看來我的 Level 還很低 ![]() Prototype 的 Element 物件,程式碼還真的有點複雜呢 你的函式會傳回陣列嗎?自己寫函式的目的是甚麼? 如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。 傳回來的是元素嗎?還是其他東西? 像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。 |
發表人: | 訪客 [ 2007-03-13, 05:41 ] |
文章主題 : | |
kourge 寫: 你的函式會傳回陣列嗎?自己寫函式的目的是甚麼?
如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。 傳回來的是元素嗎?還是其他東西? 像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。 該函式依照選擇器的內容傳回 元素 陣列 寫該函式的目的是滿足好奇心、曉得程式怎麼運作 而且我打算將我所學到的寫成一個library ![]() |
發表人: | kourge [ 2007-03-13, 13:16 ] |
文章主題 : | |
Anonymous 寫: kourge 寫: 你的函式會傳回陣列嗎?自己寫函式的目的是甚麼? 如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。 傳回來的是元素嗎?還是其他東西? 像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。 該函式依照選擇器的內容傳回 元素 陣列 寫該函式的目的是滿足好奇心、曉得程式怎麼運作 而且我打算將我所學到的寫成一個library ![]() 說實在話這樣是跟「重新發明輪子」一樣,沒有必要。我真的真的真的強烈建議不要這麼做。 不過... 假如這是你的 function: 代碼: function getElements(參數) {
// 取得一堆元素 // 假設 element 是元素陣列 var methods = { removeClassName: function(class) { var classes = this.className.split(' '); var toBeRemoved = classes.indexOf(class); if (toBeRemoved == -1) return this; classes.splice(toBeRemoved, 1); this.className = classes.join(' '); return this; }, 又一個函式: function(參數) { // 做點事情:this 就是元素本身 // 做完了 return this; // 一定要再把原來的元素 return 一次,這樣才能串接 } }; // 自訂的 method 都定義完了 // 開始套用到元素上面 for (var i = 0; length = elements.length; i < length; i++) { for (method in methods) { // 一次一次讀 method elements[i][method] = methods[method]; // 套上去 } } return elements; // 把取得的元素傳回 } 但是光這樣還不夠。因為 method 是套在陣列內的個別元素上,不是陣列本身。 |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |