jquery选择器没有';当html被替换时无法工作!
请帮我解决以下问题:jquery选择器没有';当html被替换时无法工作!,jquery,html,selector,Jquery,Html,Selector,请帮我解决以下问题: <!-- this is the visible code --> <div id="divid">{some default content}<img class="img" src="GoNextArrow.jpg" alt=""></div> <!-- this is a hidden list of contents --> <div style="display: none;"> &
<!-- this is the visible code -->
<div id="divid">{some default content}<img class="img" src="GoNextArrow.jpg" alt=""></div>
<!-- this is a hidden list of contents -->
<div style="display: none;">
<div id="divid1">{some content 1}<img class="img" src="GoNextArrow.jpg" alt=""></div>
<div id="divid2">{some content 2}<img class="img" src="GoNextArrow.jpg" alt=""></div>
<div id="divid3">{some content 3}<img class="img" src="GoNextArrow.jpg" alt=""></div>
<div id="divid4">{some content 4}<img class="img" src="GoNextArrow.jpg" alt=""></div>
<div id="divid5">{some content 5}<img class="img" src="GoNextArrow.jpg" alt=""></div>
</div>
<!-- this is an jquery script which replace the #divid with any of divid1-divid5 -->
$('#divid').hide().html(elem.html()).fadeIn();
<!-- elem is a variable, divid1 to divid5, e.g. var elem = $j('#divid'+id); -->
<!-- I need a rollover effect, I made it so: -->
$('img.img').hover(function () {
$(this).attr('src', 'GoNextArrowHover.jpg');
}, function () {
$(this).attr('src', 'GoNextArrow.jpg');
});
{某些默认内容}
{某些内容1}
{某些内容2}
{某些内容3}
{某些内容4}
{某些内容5}
$('#divid').hide().html(elem.html()).fadeIn();
$('img.img')。悬停(函数(){
$(this.attr('src','gonextarrowover.jpg');
},函数(){
$(this.attr('src','GoNextArrow.jpg');
});
这适用于第一个div divid,但在加载divid1-divid5而不是divid时不适用于divid1-divid5。
我的错在哪里
谢谢 当您使用
.html()
替换元素的内容时,您正在创建新的子元素(img
,在您的情况下),因此您需要在每次调用.html()
后将悬停处理程序重新绑定到新的img
元素。Live mens表示,该功能也将应用于与选择器匹配的所有未来元素
$(选择器).live('hover',function(){}) 不要每次都重新绑定.hover()
,只需使用,它将适用于与选择器匹配的所有当前和未来元素,例如
$('.hoverme').live('hover', function(event) {
if (event.type == 'mouseenter') {
$(this).attr('src', 'GoNextArrowHover.jpg');
}
else {
$(this).attr('src', 'GoNextArrow.jpg');
}
});
您可以考虑使用replaceWith()
:
如果您已经将函数绑定到elem
上的事件,那么即使在您将elem
交换到页面上的另一个元素之后,这些函数也应该保持不变
示例:用于管理divid
容器内的事件
$('#divid').delegate('img.img','mouseenter',function () {
$(this).attr('src', 'GoNextArrowHover.jpg');
})
.delegate('img.img','mouseleave', function () {
$(this).attr('src', 'GoNextArrow.jpg');
});
或者,如果可能,将
改为
元素,只需使用CSS使用背景图像
属性即可:
#divid > div > a {
background-image:url(GoNextArrow.jpg);
background-repeate:no-repeat;
}
#divid > div > a:hover {
background-image:url(GoNextArrowHover.jpg);
}
您还需要一些属性才能使其恰到好处您能否在中实现代码演示问题以帮助调试请这不会起作用,因为悬停
不是真正的事件;此外,hover
需要两个回调,而live
只需要一个回调。在最新版本的jQuery中,它可以从站点上进行调用:从jQuery 1.4.1开始,可以指定hover事件(映射到mouseenter和mouseleave,然后映射到mouseover和mouseout)@casablanca:你的原始评论是正确的,.live()
只接受一个处理程序。使用.delegate()是个好主意。。。我是jquery的初学者,我不知道.delegate()。谢谢@丹尼斯:不客气。您始终可以使用.delegate()
代替.live()
。它们都使用事件委派,但是.delegate()
让我们将它集中在页面的特定部分,这样它是一种更有效的方法。您传递的第二个函数将没有任何效果,因为.live()
只能接受一个处理程序。我不是故意挑您的毛病;o) ,但可能需要注意的是,在jQuery 1.4.2之后,您的更新将无法工作。出于某种奇怪的原因(IMO),他们开始在1.4.3中以mouseenter
的形式报告该事件。
#divid > div > a {
background-image:url(GoNextArrow.jpg);
background-repeate:no-repeat;
}
#divid > div > a:hover {
background-image:url(GoNextArrowHover.jpg);
}