2011-09-15 22 views
3

John Resig發表於: http://ejohn.org/apps/workshop/adv-talk/#3 說我可以使用對象參數附加方法。哪些jQuery方法可用於jQuery create元素調用的對象參數?

'text'似乎工作得很好,但對象中的任何其他內容都作爲屬性添加到元素中。

有沒有其他方法可以附加到此?

$("<li/>", { 
    click: function(){}, 
    id: "test", // mix ids and jQuery methods 
    class: "clickable" 
}); 

或這是解決方案?

$("<li/>") 
    .click(function(){}) 
    .attr("id","test") 
    .addClass("clickable"); 
+0

顯示您正在使用的示例頁面,包括jQuery版本。 –

回答

2

通過jQuery的來源看,它看起來像@Neal是幾乎權。看來,使用語法

$(htmlCode, config); 

等效於調用:

$(htmlCode).attr(config, true); 

其中true是一個(無證?)參數告訴.attr()來調用config鍵名爲jQuery的功能,如果他們上市在$.attrFn。所述$.attrFn列表(至少在jQuery的1.6.4)包括以下功能:

纈氨酸,CSS,HTML,文本,數據,寬度,高度,偏移,模糊,焦點,的focusIn,事件的內容,負載,調整大小,滾動,卸載,單擊,DBLCLICK,鼠標按下,鼠標鬆開,鼠標移動,鼠標懸停,鼠標移開,了mouseenter,鼠標離開,改變,選擇,提交的keydown,按鍵,KEYUP,錯誤

所以config對象可以包含鍵用它們的值(默認值)或上面列出的任何函數名稱來表示屬性名稱及其第一個參數。我認爲Resig在他的配置對象中顯示addClass作爲關鍵字時存在拼寫錯誤,因爲正如您注意的那樣,這隻會產生一個名爲「addclass」的屬性。

+0

這很好地回答了我的原始問題,謝謝。我認爲這個問題變成了,爲什麼在沒有性能優勢的情況下使用配置對象?考慮到無數的用例可以保證它的存在,所以必須有足夠的性能重疊......我希望。 – bodine

+0

我認爲這只是一種替代語法。一個好處是你可以將'config'對象賦值給一個變量,並將其重複用於多個選擇。 – nrabinowitz

1
$("<li/>", { 
     //any attribute can go here 
     'id': 'text', 
     'class': 'clickable' 
    }) 
    .click(function(){}) 
+0

不僅僅是屬性可以通過這個對象附加到這個元素上,儘管這裏沒有詳盡的文檔。 具體來說,有一些可以完成的jQuery事件綁定,以及'文本'方法。其他由@nrabinowitz列出的方法是一種垃圾拍攝。 – bodine

+0

@bodine - 以及文本和HTML ....這兩個都是技術上的dom元素的屬性 – Neal

+0

好點。這只是我的一個錯誤,防止這個按預期工作 – bodine

1

我剛纔測試了這兩種方法。兩種方法產生相同的結果(HTML代碼,DOM屬性),而第二種方法的速度是其兩倍。

測試用例:

javascript:void(function(){ 
var t=new Date; 
for(var i=0;i<100;i++){ 

/*paste code here, copy the whole code to the location bar*/ 

} 
alert((new Date).getTime()-t.getTime())})(); 
+0

請使用和鏈接到[jsperf](http://jsperf.com/)測試案例 – Raynos

+0

不錯的網站,我會考慮它,當我執行更復雜的測試。我不會編輯我的答案以便於複製粘貼。 –

0

我認爲很明顯,考慮到簡單的性能優勢結果,使用第二個參數對象來定義元素似乎沒有太多的情況。

正如John Resig的也指出,這也可以用於複雜的創作:

$("<li><a></a></li>") // li 
    .find("a") // a 
    .attr("href", "http://ejohn.org/") // a 
    .html("John Resig") // a 
    .end() // li 
    .appendTo("ul"); 

我的假設是,它會慢一些這樣的,但我覺得這個例子是更具可讀性,以及因爲允許完整的jQuery方法支持而不是@nrabinowitz提到的子集。