2010-01-14 94 views
1

我試圖從一個數組創建嵌套元素

<li><a href="#" class="red" id="5"><span>Some text</span></a></li> 

目前動態創建下面的使用數據,我在一個相當簡單的方式創造它

var link = '<li><a href="#" class="' + this.cssClass + '" id="' + this.id + '"><span>' + this.text + '</span></a></li>'; 
$('#options').append(link); 

雖然我需要點擊鏈接時運行的函數,怎麼做是最好的方法?

回答

4
$('<a>').attr({ 
    id: this.id, 
    href: '#' 
}).addClass(this.cssClass).click(function() { 

    // click event 

}).html('<span>' + this.text + '</span>') 
    .appendTo($('<li>').appendTo('#options')); 
+0

很好的例子,由於 – cmcginty 2011-05-25 04:08:42

0

試試這個:

$(link).find('a').click(clickHandlerFunction).end().appendTo('#options'); 
1
// 1. create jquery object from your html 
var $li = $(link); 

// 2. bind <a> element's click event 
$("a", $li).click(function(){ 
    // your code or a function 
}); 

// 3. place <li> somewhere in html 
$("body").append($li); 
0

正在構建的字符串的方法是罰款(儘管它可能看起來不一樣好使用所有的jQuery函數),將實際執行比簡單地使用所有的jQuery幫助函數。如何做到這一切一舉是這樣的:

$('<li><a href="#" class="' + this.cssClass + '" id="' + this.id + '"><span>' + this.text + '</span></a></li>') 
    .appendTo('#options').find('a').click(function(e){ 
     // Handle click 
     e.preventDefault(); 
    }); 
2

我喜歡在這種情況下做的是創造,我在數組中克隆的每個元素在頁面上隱藏的「模板」元素

<li id="template"><a href="" class="" id=""><span></span></a></li> 

然後通過您的陣列循環和添加這些元素

$(arr).each(function(i){ 
    MyObject obj = arr[i]; 
    var $li = $("#template").clone().removeAttr("id"); 
    $("a", $li).attr("id", obj.id).addClass(obj.cssClass); 
    $("span", $li).text(obj.text); 
    $("ul").append($li); 
}); 

忘記連桿結合部分!!

$("ul li a").live("click", function(){ 
    // DO WORK 
}); 

這應該綁定所有的「一」 - 單擊事件,直到永永遠遠

+0

這是有用的 - 謝謝你的分享。你可以用'this'代替arr [i] – mkoryak 2010-01-14 18:29:07

+0

謝謝!你可以添加一個#template {display:none; } css類,但我認爲首選方法是$(document).ready(function(){$(「#template」)。hide();}); – hunter 2010-01-14 18:30:56