让我们假设我们有一些带有附加动作的html。
var html = $('<a href="#">click me</a>');
html.find('a').bind('click', function(e) {
alert('You clicked me!');
});
现在我们想要将这段html(带有绑定操作)附加到某些<div id="destination"></div>
。
$('#destination').append(html);
有可能吗? (见jsfidder)
我需要此功能来绑定模态窗口内容的一些操作,然后将此内容附加到模态窗口的html包装器,然后调用Modal.show()
。所以
这是好的做法还是不建议这样做?
答案 0 :(得分:4)
这个概念应该可以正常运作。你的小提琴的问题是使用find
,它会查看后代元素,但你的a
元素不是后代。请改用filter
:
var html = $('<a href="#">click me</a>');
html.filter('a').bind('click', function(e) {
alert('You clicked me!');
});
这是一个updated fiddle。
或者,您可以使用on
(如果您使用的是jQuery 1.7+)或delegate
将事件处理程序附加到#destination
:
$("#destination").on("click", "a", function() {
alert('You clicked me!');
});
如果你这样做,你可能想给a
元素一些标识符,否则事件处理程序将为a
的任何#destination
后代执行。
修改(根据评论)
正如@RoryMcCrossan在评论中所指出的,在这种情况下,您实际上可以完全删除filter
。这是因为jQuery对象中只有一个元素。但是,如果为了问题的目的缩短了代码,请注意,因为在这种情况下删除filter
会将事件处理程序绑定到所有元素:
var html = $('<a href="#">click me</a>');
html.bind('click', function(e) {
alert('You clicked me!'); //Bound to all elements in `html`
});
答案 1 :(得分:0)
据我所知$('<a href="#">click me</a>');
应该返回创建的元素。
您应该删除find('a')
来电,如下例所示:
var html = $('<a href="#">click me</a>');
html.bind('click', function(e) {
alert('You clicked me!');
});
答案 2 :(得分:0)
您是否查看了.find()的文档。
获取当前匹配组中每个元素的后代 元素,由选择器,jQuery对象或元素过滤。
你的html元素数组没有后代。你可以使用filter()在DOM中查找,但在这里你可以直接使用each()
:
var html = $('<a href="#">click me</a>');
html.each(function(index){
$(this).bind('click', function(e) {
alert('You clicked me!');
});
});
$('#destination').append(html); //click not works :(
检查更新的jsFiddle。
答案 3 :(得分:0)
在追加后绑定事件(html成为实际的DOM对象)。
var html = $('<a href="#">click me</a>');
$('#destination').append(html).find('a').click(function(e) {
alert('You clicked me!');
});
或绑定html
var html = $('<a href="#">click me</a>');
html.click(function(e) {
alert('You clicked me!');
});
$('#destination').append(html);