我有,例如:
$first = $('#firstElement').click(function() { });
但是在页面执行的某些方面,我将用另一个替换该元素:
$newElement = jQuery('<div />');
$first.replaceWith($newElement);
但是我想保留第二个元素中第一个元素的回调...
这可能吗?
编辑1
我已经知道如何使用.on()
或.delegate()
执行此操作。这是我的情景:
我需要在选择器更改后加载某些内容,但是,该选择器的内容会根据登录用户的角色而有所不同。我已将信息存储在localstorage
中。该选择器的内容通过以下方式加载:
window.Core.setBranchesSelector($('#theElementInWhichTheSelectorWillBe'));
该函数创建一个<select>
元素。我可以在js
内为该页面制作:
$('#parent').on('click', '#theElementInWhichTheSelectorWillBe', function() {});
但我想让这个功能尽可能灵活,因此,如果我做出一些想法:
$elementToBeReplaced = $('<coolElement />').click(function() {});
/* Something really cool with that element */
Core.setBranchesSelector($elementToBeReplaced);
选择器继承click
事件的回调...
答案 0 :(得分:2)
你问题的答案很简单:不,你不能这样做。至少在jQuery的新版本中没有(1.7可以做到,因为@undefined已在评论的答案#15708467中说明)。
但是,这是一个使用.on()委派的简单示例:
$(function() {
$("#parent").on("click", ".child", function() {
alert($(this).text());
});
$("input").click(function() {
$(".child").remove();
$("#parent").append("<div class='child'>I'm a replacement</div>");
});
});
单击按钮后,您会注意到,单击替换div会调用相同的单击功能,并使用新div的文本发出警报。
注意:此处的重要部分是可以使用相同的选择器(在本例中为.child
)作为原始选择来替换替换。我在这里使用过一堂课,但我可以使用父母的第一个孩子,或者其他任何有用的孩子。
另请注意:您也不必绑定到直接父级,您可以使用document
在顶部绑定,但不建议这样做,因为它会降低您的代码速度。您应尽可能靠近要附加事件的元素进行绑定,这样代码就不必在DOM树中走得太远。
答案 1 :(得分:1)
jQuery不提供直接访问已绑定事件的API。
将事件放在父元素上,替换子元素,并依赖事件冒泡来捕获它。
答案 2 :(得分:1)
您需要在每个元素中包含相同的id,或者为每个div提供一个公共类。一旦你这样做,它就像:
一样简单$(document).on('click','.some-common-class',function(){
});