次のような検索ページがあります
<div class="">
<input id="search-input" type="text" class="input-medium search-query span4">
</div>
<div id="result">
</div>
<div id="result-template">
<div class="hide-item item" id="item">
<div style="float:left">
<img class="thumbnail" src="" alt="" />
</div>
<div id="name">
<p class="title"></p>
<p class="views"></p>
</div>
</div>
</div>
およびjQueryとして
$(function(){
$('#search-input').live('keyup',function() {
var search_input = $(this).val();
var keyword = encodeURIComponent(search_input);
var yt_url = 'http://gdata.youtube.com/feeds/api/videos?q='+keyword+'&format=5&max-results=10&v=2&alt=jsonc';
$.ajax({
url: yt_url,
type: 'GET',
dataType: 'jsonp',
complete: function(xhr, textStatus) {
//called when complete
},
success: function(response, textStatus, xhr) {
if(response.data.items) {
var template = $('#item').clone();
$('#result').html(template);
$.each(response.data.items, function(i, data) {
console.log(data)
search_data = {
'id': data.id,
'title': data.title,
'views': data.viewCount,
'thumbnail': data.thumbnail['sqDefault'],
}
video_result_template(search_data);
});
} else {
// var template = $('#item').clone();
// $('#result').html(template);
}
},
error: function(xhr, textStatus, errorThrown) {
//called when there is an error
}
});
});
});
// filling out the search template
function video_result_template(data) {
var item = $('#item').clone();
item.removeClass('hide-item');
item.find('img').attr('src', data.thumbnail);
item.find('.title').html(data.title);
item.find('.views').html(data.views);
$('#item').attr('id', data.id);
item.addClass('view-item');
// $('#result').append(item).fadeIn(); // slow/fast?
$('#result').append(item).fadeIn('slow');
}
タイトル、ビュー、URL を含む div で結果を取得します。divをクリックすると、次のjQueryが起動されます
$(function(){
$('.item').live('click', function(){
// alert(this.id);
console.log($(this));
var url = $('#video-frame').attr('src');
var new_url = url.replace(/embed\/[\w -]*/g, 'embed/' + this.id);
alert($('.title').html() + ',' + new_url);
$('#video-frame').attr('src', new_url);
});
});
これは正しいタイトルを警告しますが、url (または video_id はリスト内の次のビデオのものです)。
Firefox から自分の html を見ると、次のように表示されます
<div id="result" style="display: block;">
<div id="lqT_dPApj9U" class="item view-item">
<div style="float: left;"><img alt="" src=
"http://i.ytimg.com/vi/S2nBBMbjS8w/default.jpg" class="thumbnail" /></div>
<div id="name">
<p class="title">Coke 2012 Commercial: "Catch" starring NE_Bear</p>
<p class="views">619167</p>
</div>
</div>
<div id="hKoB0MHVBvM" class="item view-item">
<div style="float: left;"><img alt="" src=
"http://i.ytimg.com/vi/lqT_dPApj9U/default.jpg" class="thumbnail" /></div>
<div id="name">
<p class="title">Coca-Cola Happiness Machine</p>
<p class="views">4791156</p>
</div>
</div>
<div id="item" class="item view-item">
<div style="float: left;"><img alt="" src=
"http://i.ytimg.com/vi/S2nBBMbjS8w/default.jpg" class="thumbnail" /></div>
<div id="name">
<p class="title">Coke 2012 Commercial: "Catch" starring NE_Bear</p>
<p class="views">619167</p>
</div>
</div>
</div>
- はっきりと見える場合、最初と最後の div には同じデータ要素があります
- 実際の違いは、最後の div が最初の要素のコピーであることです
- 最後の要素に無効な id="item" があります (ビデオ ID である必要があります)
質問 この問題を解決するにはどうすればよいですか?
JSFiddle http://jsfiddle.net/hhimanshu/F5NHK/
必須
検索後、任意のビデオ div をクリックすると、適切なビデオ ID とタイトルを指定する必要があります
リストをフィドルでクリックしても何も実行されません (理由はわかりませんが、私のシステムでは動作します)