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版本 改良了 $() 函式 :twisted:

跟 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版本 改良了 $() 函式 :twisted:

跟 jQuery 的一樣,可以串接下去

$('Element').method1('String...').method2('????')

我想實作這個函式,可是一直失敗

請問是不是要利用多重繼承呢? :?:


失敗的訊息是....?

發表人:  Delta(Guest Mode) [ 2007-03-09, 06:29 ]
文章主題 : 

legnaleurc 寫:
delta 寫:
Prototype 1.5版本 改良了 $() 函式 :twisted:

跟 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() 就會發生錯誤,

?.

我要實作類似的東西 :o

例如:

'#divBox'.toElement().setClassName('style1').position(10,40);

發表人:  kourge [ 2007-03-09, 22:23 ]
文章主題 : 

delta 寫:
kourge 寫:
能不能提供一個範例?
像比如說... $$('#sidebar div').addClassName('sidecontent').hide() 就會發生錯誤,

?.

我要實作類似的東西 :o

例如:

'#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;
}
});


謝謝你的回答 :wink:

可是我不打算使用 Framework 這類的東西完成 8-)

關於取得 Element 的函式

我已經寫好了,仿 CSS Selector 去取得元素 :wink:


只是沒辦法像 Prototype,可以串接方法、而且方法可以不用照順序接

Ex:
Function1('hi').method6().method2('world'); :cry:

看來我的 Level 還很低 :oops:

Prototype 的 Element 物件,程式碼還真的有點複雜呢

發表人:  kourge [ 2007-03-12, 13:06 ]
文章主題 : 

delta 寫:
kourge 寫:
假如你要自訂的是可以套在 Element 上的函式,可以直接擴充 Element.Methods 這個物件。別忘了傳回本來的元素。
Object.extend(Element.Methods, {
position: function(element, x, y) {
//做一點事情,調調位置
return element;
}
});


謝謝你的回答 :wink:

可是我不打算使用 Framework 這類的東西完成 8-)

關於取得 Element 的函式

我已經寫好了,仿 CSS Selector 去取得元素 :wink:


只是沒辦法像 Prototype,可以串接方法、而且方法可以不用照順序接

Ex:
Function1('hi').method6().method2('world'); :cry:

看來我的 Level 還很低 :oops:

Prototype 的 Element 物件,程式碼還真的有點複雜呢

你的函式會傳回陣列嗎?自己寫函式的目的是甚麼?
如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。
傳回來的是元素嗎?還是其他東西?

像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。

發表人:  訪客 [ 2007-03-13, 05:41 ]
文章主題 : 

kourge 寫:
你的函式會傳回陣列嗎?自己寫函式的目的是甚麼?
如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。
傳回來的是元素嗎?還是其他東西?

像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。


該函式依照選擇器的內容傳回 元素 陣列

寫該函式的目的是滿足好奇心、曉得程式怎麼運作

而且我打算將我所學到的寫成一個library :wink:

發表人:  kourge [ 2007-03-13, 13:16 ]
文章主題 : 

Anonymous 寫:
kourge 寫:
你的函式會傳回陣列嗎?自己寫函式的目的是甚麼?
如果是傳回陣列就比較辛苦一點,如果光傳回一個物件還比較容易。
傳回來的是元素嗎?還是其他東西?

像是用 CSS selector 取回元素這種東西,除非有非常好的理由,否則用 framework 比較好,省得自己麻煩。主要就是要好好學 framework 的裡裡外外、運作模式。


該函式依照選擇器的內容傳回 元素 陣列

寫該函式的目的是滿足好奇心、曉得程式怎麼運作

而且我打算將我所學到的寫成一個library :wink:

說實在話這樣是跟「重新發明輪子」一樣,沒有必要。我真的真的真的強烈建議不要這麼做。
不過...

假如這是你的 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/