老实说,我认为在一个页面中嵌入 50 个视频并不好——不管可见性与否;仅仅是因为它们将被浏览器处理,尽管它们不可见。(如果我错了,请随时纠正我,但浏览器会看到并处理整个 DOM - 并且只需将样式应用于“隐藏”位。)
Gustavo Straube 给出了一个非常好的答案,如果你想在 DOM 中拥有 50 个元素,尽管它可能对浏览器和带宽都有影响。
我可能会更倾向于解析 XML,将所有数据存储为 JSON,然后使用模板框架(如 Mustache.js)提供的 HTML 中的 jQuery 动态更新 DOM。
/* Generate JSON */
$url = "http://www.theURLofmyXML.blah";
$xml = simplexml_load_file($url);
$i = 0;
$json = array();
while ($i < 49) {
$arr['title'] = (string) $xml->query->results->item[$i]->title;
$arr['videoid'] = (string) $xml->query->results->item[$i]->id;
$arr['explanation'] = (string) $xml->query->results->item[$i]->explanation;
$json[] = $arr;
}
echo json_encode($json);
然后,在您的标记中有类似下面的内容,只是为了初始化您的第一个 x 视频 - 在本例中为 10..
$(document).ready(function(){
var template = '{{$title}}<br /><iframe width="400" height="225"'
+ 'src="http://www.youtube.com/embed/{{$videoid}}?rel=0&autohide=1&showinfo=0" frameborder="0" allowfullscreen></iframe><br/>'
+ '{{explanation}}<br /><br />';
var html = '';
var i=0;
for(; i<10; i++){
var item = json[i];
html += Mustache.to_html(template, item);
}
$('#videos').html(html); //where #videos is a div to contain your videos
接下来有一个锚点(在本例中为#next)来获取接下来的 10 个视频。
$('#next').click(function(){
/* template, i and json are still in scope! */
var j = i+10;
for(; i<j; i++){
var item = json[i];
html += Mustache.to_html(template, item);
}
$('#videos').html(html); //where #videos is a div to contain your videos
});
这样做的好处是也很容易做一个以前的anchor...
$('#prev').click(function(){
/* template, i and json are still in scope! */
var j = i -10;
i -= 20; //10 for the current page, 10 for the start of the previous page
for(; i<j; i++){ //rebuild div content of previous page
var item = json[i];
html += Mustache.to_html(template, item);
}
$('#videos').html(html);
});
重申一下,这是一个替代解决方案- 我建议使用 JSON 比 XML 更轻量级和更灵活,并且它还消除了拥有 50 个未使用的 DOM 元素的要求一度。您选择您拥有的实现可能是有原因的,但如果我遇到这个问题,这不是我会采用的实现!