为什么我不能使用insertAfter作为常规jQuery对象的返回?

时间:2010-04-04 10:12:31

标签: javascript jquery jquery-ui

我正在尝试在表单元素之后插入一个链接来清除它们。

带有标题的演示代码不起作用:

h2 = $('h2');
clickytest = $('<a href="#" class="clicky">click me</a>').insertAfter(h2).click(function() {
  $(this).append('foo');
});

但这样做:

h2 = $('h2');
clickytest = $('<a href="#" class="clicky">click me</a>').insertAfter(h2);
$('a.clicky').click(function() {
  $(this).append('foo');
});

唯一的区别是我已经回去并重新选择了新元素,而不是使用insertAfter返回的内容。

另一方面,如果整个文档中只有一个 H2,那么第一个版本就可以了。这是怎么回事?我尝试过使用每个(),但我不确定jQuery在这里做了什么。

1 个答案:

答案 0 :(得分:1)

我会坚持在移动它们之前将事件处理程序附加到元素,因为一些附件方法在它们返回的上下文上有所不同。在继续之前附加点击以使其始终有效,如下所示:

$('<a href="#" class="clicky">click me</a>').click(function() {
  $(this).append('foo');
}).insertAfter('h2');​

See here for a working sample(多个<h2>元素)