我正在尝试从子页面加载内容,然后为prettyPhoto插件所需的库添加rel属性。脚本运行后,rel只被添加到最后一组图像中。\
HTML
<div class="prettyphotothumb">
<ul class="navsub">
<li><a href="album.html"><img src="images/thumbnail.jpg" alt="" />Album</a></li>
<li><a href="blarg.html"><img src="images/thumbnail.jpg" alt="" />Blarg</a></li>
<li><a href="test.html"><img src="images/thumbnail.jpg" alt="" />Test</a></li>
</ul>
</div>
JS
if($('div.prettyphotothumb').length > 0) {
$('div.prettyphotothumb a').each(function() {
var pageLink = $(this);
var albumTitle = $(pageLink).text();
var album = $('<div class="album"></div>').appendTo( $(pageLink).parent());
$('.album').load(this.href+' .prettyphotoalbum p > *',null,function(){
album.children('a').attr('rel','prettyPhoto['+albumTitle+']');
});
$('a[rel^="prettyPhoto"]').live("click",function() {
$.prettyPhoto.open($(this).attr("href"),"","");
return false;
});
});
}
答案 0 :(得分:2)
当您使用each
进行迭代时,每次迭代都会添加<div class="album">
:
var album = $('<div class="album"></div>').appendTo( $(pageLink).parent());
然后就在下面:
$('.album').load(//...
在第一次迭代中,$('.album').length
将是一个,在第二次迭代时它将是两个,等等。最后的迭代将最终在您所有三个.load('test.html .prettyphotoalbum p > *', ...
元素上调用<div class="album">
已经补充说。
我认为您只想将load
绑定到刚刚创建的内容:
// Use album rather than $('.album')
album.load(this.href+' .prettyphotoalbum p > *',null,function(){
album.children('a').attr('rel','prettyPhoto['+albumTitle+']');
});
此外,您只需要一次.live
来电,请移动:
$('a[rel^="prettyPhoto"]').live("click",function() {
$.prettyPhoto.open($(this).attr("href"),"","");
return false;
});
在.each
之外。所以这样的事情应该会更好:
if($('div.prettyphotothumb').length > 0) {
$('div.prettyphotothumb a').each(function() {
var pageLink = $(this);
var albumTitle = $(pageLink).text();
var album = $('<div class="album"></div>').appendTo($(pageLink).parent());
album.load(this.href+' .prettyphotoalbum p > *', null, function() {
album.children('a').attr('rel', 'prettyPhoto[' + albumTitle + ']');
});
});
$('a[rel^="prettyPhoto"]').live("click", function() {
$.prettyPhoto.open($(this).attr("href"), "", "");
return false;
});
}