jQuery - programmatically create dynamic links
我是jQuery和javaScript编程的新手,想知道是否有人可以帮助我?
我有一个使用无序列表填充的滑块。非常好用,在按钮图像上动态渲染文本。每个列表项都包含一个调用函数的链接。例如:
1 2 3 4 | <li> <img src="images/button.png" />'MyTitle' </li> '; |
但是我现在希望使用和XML文件动态填充整个页面。页面上没有静态内容,因此滑块内容必须能够更改并采用可变数量的按钮,因此链接。
我从XML文件中检索了数据并将其存储在许多数组中。
添加列表项的代码现在如下所示:
1 2 3 4 5 6 7 8 | for (i = 1; i < count; i++) { var newListItem = ' <li> <img src="images/button.png" />'+myTitle[i]+' </li> '; $("#sliderList").append(newListItem); }; |
到现在为止还挺好。我认为。然而,我无法进一步发展的是以编程方式创建链接。该链接打开一个jQueryUI对话框。静态页面上链接的代码如下:
1 2 3 4 5 | $('#my_link').click(function(){ clearScreen(); //clears any open dialog boxes $('.myContent').dialog('open'); return false; }); |
我的问题是如何以编程方式创建此代码?以下是,我知道绝对不对,还有很长的路要走,但它让我知道我想做什么:
1 2 3 4 5 6 7 | for (i = 1; i < count; i++) { $("'"+myLink[i]+"_link'").click(function() { clearScreen(); //clears any open dialog boxes $("'."+myContent[i]+"'").dialog.('open'); return false; }); }; |
我也意识到我可能从错误的角度接近这个,所以任何指针,帮助等都非常感激地收到!
在将新创建的项附加到DOM树之前,您可以附加单击处理程序(即您所谓的'link')。 尝试将块修改为以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | for (i = 1; i < count; i++) { var myNewContent ="."+myContent[i]; // bind myContent[i] to the closure var newLink = $(''+myTitle[i]+''); newLink.click(function() { clearScreen(); //clears any open dialog boxes $(myNewContent).dialog('open'); return false; }); var newListItem = $('<li />').append( $('').append( '<img src="images/button.png" />', newLink ) ); $("#sliderList").append(newListItem); }; |
有趣的两个文档页面是jQuery的Delegate方法和jQuery的模板插件。
一个更好的解决方案可能看起来像这样:
1 2 3 4 | $('#sliderList').delegate('li a','click',function(event){ event.preventDefault(); // do stuff }); |
建议使用
这意味着您可以不断更改列表的内容,链接将继续按照需要运行。
我包含了模板插件的链接,因为这恰好是将结构化数据转换为HTML而不需要在javascript中构建所有内容的绝佳方式。