2013-06-25 58 views
3

我正在遍歷一個列表,並且需要爲每個列表元素創建一個jQuery Mobile radio button。所有的單選按鈕都應該在div class="radio-controls"之內,一旦完成,它們將被附加到DOM中。如何創建jQuery元素的集合並將它們附加到DOM?

這裏是我嘗試:

var label = $("<label/>").attr("data-" + $.mobile.ns + "iconpos", "notext"); 
     barrel = []; 

    for (var i = 0; i < myListitems.length; i += 1) { 
     var item = myListitems[i]; 

     barrel.push(
      $("<input type='radio' name='radio-" + this.uuid + "' value='radio-" + this.uuid + "-" + i +"' />") 
      .wrap(label) 
      .checkboxradio() 
     ); 
     } 
    } 

循環後,我有一個jQuery的數組,我需要追加。

但是makeArray失敗並返回

context is undefined 

內部的jQuery

if ((context.ownerDocument || context) !== document) { 

據說這是通過不包括從文檔中選擇的元件的陣列所引起(礦仍不會被添加到DOM),而document.createFragement不起作用,因爲我認爲我無法將jQuery對象添加到片段。這個做:

var fragment = document.createDocumentFragment(); 

// in my loop 
bullet = $("<input type='radio' name='radio-" + this.uuid + "' value='radio-" + this.uuid + "-" + i +"' />") 
    .wrap(label) 
    .checkboxradio() 
fragment.appendChild(bullet); 

// after loop, add to document 
fragment[o.bulletsPos === "top" ? prependTo : appendTo](el); 

返回此錯誤:

Value does not implement interface Node. 

問題: 有沒有一種方法來生成的jQuery的項目的集合,並把這段DOM?當然,我可以逐個插入每個項目,但是我想創建一個動態的並插入一次的東西。

感謝您的幫助!

+0

你能不能做一個小提琴?我知道你可以用'.map()'函數創建一個元素數組,然後將整個數組附加到一個元素上。我做了一個小提琴,它有幫助嗎(我可能會忽略這個標記)? http://jsfiddle.net/558qq/ – tymeJV

+0

試圖更新你的小提琴。 1sec – frequent

+0

@tymeJV:[http://jsfiddle.net/558qq/1/](http://jsfiddle.net/558qq/1/)但我剛看到,也許它會工作,如果不包裝'$() '圍繞收集。 1sec – frequent

回答

5

能得到這個問題會在下面的示例代碼添加:

var collection = []; 
var elem; 

for (var i = 0; i < 10; i+=1) { 
    elem = $("<span />").attr("class","foo-"+i).text("hello"); 
    collection.push(elem); 
} 
console.log(collection); 
// the "context" error 
//$(collection).appendTo(document.body); 
$(document.body).append(collection); 

小提琴演示:http://jsfiddle.net/558qq/3/

+0

感謝您的幫助! – frequent

相關問題