2010-01-14 93 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