Jquery 如何在不丢失事件的情况下动态替换HTML标记
我有一个html ul标记,其中有如下内容:Jquery 如何在不丢失事件的情况下动态替换HTML标记,jquery,html,Jquery,Html,我有一个html ul标记,其中有如下内容: <div id="sidebar"> <ul id="menu"> <li> <div id="clickable"> <img src="img/img8.png" alt="Descripción de la igen 8.png">/img> </div>
<div id="sidebar">
<ul id="menu">
<li>
<div id="clickable">
<img src="img/img8.png" alt="Descripción de la igen 8.png">/img>
</div>
</li>
<li>
<div id="clickable">
<img src="img/img10.png" alt="Descripción de la imagen 10"></img>
</div>
</li>
</ul>
</div>
它适用于所有继承的元素,但我不能使“mouseleave”事件继承。如果我加上:
$('#menu').on("hover", '#menu li',
function() {
//mouse over LI and look for A element for transition
$(this).find('img')
.animate( { opacity:1 }, 200)
},
function() {
$(this).find('img')
.animate( { opacity:0.5 }, 200)
});
它不起作用。如何处理hover onleave事件???从DOM中删除元素时,绑定到该元素的任何事件处理程序都将不再工作。您需要使用事件委派将事件处理程序绑定到始终位于DOM中的祖先元素。您可以使用以下方法执行此操作: 这将事件处理程序绑定到父
ul
元素。由于大多数DOM事件都在树上冒泡,因此可以在祖先元素上捕获它们。当事件到达ul
时,方法上的将检查它是否源自与选择器匹配的元素。如果执行了,则将执行事件处理程序
这样做的另一个好处是,只有一个事件处理程序而不是多个事件处理程序(每个.clickable
元素一个),这样效率更高。当您从DOM中删除一个元素时,绑定到该元素的任何事件处理程序都将不再起作用。您需要使用事件委派将事件处理程序绑定到始终位于DOM中的祖先元素。您可以使用以下方法执行此操作:
这将事件处理程序绑定到父ul
元素。由于大多数DOM事件都在树上冒泡,因此可以在祖先元素上捕获它们。当事件到达ul
时,
方法上的将检查它是否源自与选择器匹配的元素。如果执行了,则将执行事件处理程序
这样做的另一个好处是,只有一个事件处理程序而不是多个(每个.clickable
元素一个),这更有效。使用.on方法绑定事件,这允许事件委派。看
摘录:
委派事件的优点是,它们可以处理以后添加到文档中的子元素中的事件。通过选择在附加委派事件处理程序时保证存在的元素,可以使用委派事件来避免频繁附加和删除事件处理程序使用.on方法绑定事件,这允许事件委派。看
摘录:
委派事件的优点是,它们可以处理以后添加到文档中的子元素中的事件。通过选择在附加委派事件处理程序时保证存在的元素,可以使用委派事件来避免频繁附加和删除事件处理程序live
已弃用。在
上使用,如果您仍然使用较旧版本的jQuery,请使用delegate
。我使用了$('body')。delegate方法,它工作得非常好!谢谢“悬停”方法怎么样??我不能让它同时继承onmouseenter和onmouseeve。我只能将事件放在MouseCenter上。如果我尝试添加onmouseleave,它将不起作用!有关更多说明,请参见编辑…live
已弃用。在
上使用,如果您仍然使用较旧版本的jQuery,请使用delegate
。我使用了$('body')。delegate方法,它工作得非常好!谢谢“悬停”方法怎么样??我不能让它同时继承onmouseenter和onmouseeve。我只能将事件放在MouseCenter上。如果我尝试添加onmouseleave,它将不起作用!有关更多解释,请参见编辑…我尝试了您的,抱歉,我误解了某些内容,但我将在其他地方尝试,因为我理解您所说的内容,而且它看起来合乎逻辑,但对我不起作用。但我认为这是我的错,因为我不知道如何准确地使用它。但是谢谢!我以后一定会用的@Sonhja-没问题:)只有在使用jQuery 1.7或更高版本时,我的版本才能工作。对于旧版本,您必须使用委托
。我很高兴你解决了你的问题!我试过你的,抱歉,但我误解了一些东西,但我会在其他地方试一下,因为我理解你说的话,它看起来合乎逻辑,但对我不起作用。但我认为这是我的错,因为我不知道如何准确地使用它。但是谢谢!我以后一定会用的@Sonhja-没问题:)只有在使用jQuery 1.7或更高版本时,我的版本才能工作。对于旧版本,您必须使用委托
。我很高兴你解决了你的问题!
$('#menu').on("hover", '#menu li',
function() {
//mouse over LI and look for A element for transition
$(this).find('img')
.animate( { opacity:1 }, 200)
});
$('#menu').on("hover", '#menu li',
function() {
//mouse over LI and look for A element for transition
$(this).find('img')
.animate( { opacity:1 }, 200)
},
function() {
$(this).find('img')
.animate( { opacity:0.5 }, 200)
});
$("#menu").on("click", ".clickable", function() {
//Do stuff
});
$('.clickable').live('click',function(){
//do stuff here
});
OR
$('body').delegate('.clickable','click',function(){
//do stuff here
});