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);
}