有没有办法在jQuery中将回调从一个元素附加到另一个元素?

时间:2013-03-29 17:36:00

标签: jquery jquery-callback replacewith

我有,例如:

$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事件的回调...

3 个答案:

答案 0 :(得分:2)

你问题的答案很简单:不,你不能这样做。至少在jQuery的新版本中没有(1.7可以做到,因为@undefined已在评论的答案#15708467中说明)。

但是,这是一个使用.on()委派的简单示例:

http://jsfiddle.net/8dCQT/

$(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(){
});