2012-09-04 51 views
0

注意:這是another question的延續,我決定是兩個獨立的問題需要解決。我目前還不確定如何描述這個問題,所以我會盡我所能,當我得到更多的清晰度時,我會重述我的問題以供將來參考。從陣列創建DOM節點

我正在寫兩個基本的jQuery插件,$.fn.query$.fn.build之後,這樣一個數組,並創建HTML代碼分別插入到文檔中。我目前正在使用Vimeo視頻ID對其進行測試,以顯示視頻。

$.fn.build有三個部分。首先它用每個容器包裝每個陣列項目,將它們構建成行(問題區域),然後最後它將所有內容都包裝在一個容器中。 (每一部分都是可選的)。

具體來說問題出自這一行:$(tmp).add(newRow);雖然它是有效的JavaScript。

if (options.splitBy !== undefined && options.wrapRow !== undefined) { 
    var tmp = $([]), 
     newRow = function(i) { 
      $(build.splice(i, i + options.splitBy)).wrapAll(options.wrapRow).parent(); 
     }; 

    for (var i = 0, l = build.length, a = options.splitBy; i < l; i += a) { 
     $(tmp).add(newRow); 
    } 

    build = tmp; 
    console.log(build); 
} 

參見:http://jsbin.com/upatus/2/edit

+0

有一點注意:使用['add'](http://api.jquery.com/add/)時,您需要使用返回值。 – Yoshi

回答

1

我敢肯定,你想要使用的功能,而不是添加的功能本身。此外,您將希望在整個時間內使用相同的tmp對象,而不是將其包裝到新的jQuery實例中,而不是添加到原始的實例中。嘗試

tmp.add(newRow(i)); 

順便說一句:如果你想建立一個數組,你應該使用

var tmp = []; 

tmp.push(…); 

現在我已經看過了代碼與其他題。這兩個答案都是正確的,並含有一些有效點:

  • splice是jQuery的原型陣列功能,並返回一個數組。 (您已經fiexd現在這樣)
  • query方法返回一個數組,而應返回一個jQuery實例鏈接
  • build變量未初始化,但使用

你真的應該選擇是否要在你的函數內部使用數組或jQuery對象,而不是混合它們。

順便說一句,你應該把你的函數重命名爲更具描述性的名字。 「構建」和「查詢」非常模糊,可能與其他插件相沖突。

+0

這有幫助,但它仍然沒有工作:http://jsbin.com/upatus/4/edit –

+0

你應該學習如何使用調試器。或者,jsbin有一個控制檯和一些自動警告。 – Bergi