JSON div风格背景图片链接没有斜杠?

时间:2016-02-16 19:14:39

标签: javascript jquery json

我正在使用JSON创建缩略图列表,我对这行代码有疑问:

videoHTML += '<div class="user-background" style="background-image: url("' + video.channel.video_banner + '");">';

我可以看到div元素及其中的所有内容,除了background-image链接没有斜杠。

这是我在调试器元素中看到的代码:

<div class="user-background" style="background-image: url(" https:="" static-cdn.jtvnw.net="" jtv_user_pictures="" esl_csgo-channel_offline_image-c9f885982daa1c83-1920x1080.png");"=""><div class="user-background" style="background-image: url(" https:="" static-cdn.jtvnw.net="" jtv_user_pictures="" esl_csgo-channel_offline_image-c9f885982daa1c83-1920x1080.png");"=""><img class="user-logo" src="https://static-cdn.jtvnw.net/jtv_user_pictures/esl_csgo-profile_image-546a0c1883798a41-300x300.jpeg" alt="user image"><p class="user-name">ESL_CSGO</p></div><a href="#" onclick="popup('esl_csgo')"><img class="video-image" src="http://static-cdn.jtvnw.net/previews-ttv/live_user_esl_csgo-320x180.jpg"></a><h1 class="game-name">Counter-Strike: Global Offensive</h1><br><i></i><span class="views-number">41304</span><p class="short-date-format date0">2012-06-11T13:36:21Z</p></div>

你可以用引号解释我做错了吗? (我相信他们造成了这个问题。)

以下是您更好地理解它的代码:

$(document).ready(function(){   
    $.getJSON( "https://api.twitch.tv/kraken/streams", function( data ) {
        var items = [];
        var videoHTML ='<ul>';
        //Get data and create video grid
        $.each(data.streams, function(i, video){ 
            if(i < 9) {  //get only first 9 data
                var videoDate = $.format.date(video.channel.created_at, "MMM dd yyyy");
                videoHTML += '<li class="video-stream ' + video.channel.language + '">';
                videoHTML += '<div class="user-background" style="background-image: url("' + video.channel.video_banner + '");">';
                videoHTML += '<img class="user-logo" src="' + video.channel.logo + '" alt="user image">';
                videoHTML += '<p class="user-name">' + video.channel.display_name + '</p>';
                videoHTML += '</div>';
                videoHTML += '<a href="#" onclick="popup(\'' + video.channel.name + '\')">';
                videoHTML += '<img class="video-image" src="' + video.preview.medium + '"></a>';
                videoHTML += '<h1 class="game-name">' + video.game + '</h1><br/>';
                videoHTML += '<i></i>';
                videoHTML += '<span class="views-number">' + video.viewers + '</span>';
                videoHTML += '<p class="short-date-format date' + i + '">' + videoDate + '</p>';
                videoHTML += '</li>';
                // var userId = "'#userBackground" + i +"'";
                alert(userId);
                // console.log(video._id);
                // console.log(data.streams[i].game);
                // console.log(data.streams[i]._links.self);
                // console.log(data.streams[i].preview.medium);
            } else {
                return false;
            }
        });
        videoHTML += '</ul>';
        videoHTML += '<div class="clearfix"></div>';
        $('#placeholder').html(videoHTML);
    }); //getJson
}); //end ready

1 个答案:

答案 0 :(得分:0)

  

更新 我发现了您的问题。您必须将"周围的style更改为\'
如此:

videoHTML += '<div class="user-background" style=\'background-image: url("' + $.trim(video.channel.video_banner) + '");\'>';

See it working with your corrected code here.

我重写了整个事情并向您展示了jQuery的一些基本功能。请记住,它不一定是更好,但也许更有效,更容易理解。仅在JS中,就有十几种不同的方式来编写它。在jQuery中,一百万。我可以很容易地缩短它,如果对我自己来说,我会做很多不同的事情。但是,我希望这能告诉你jQuery的一些不同用法,以及理解为什么变量控制如此重要。我实际上没有看到charlietfl的代码正常工作。背景仍然没有显示出来。但是,正如您在我的示例中所看到的那样,我不仅缩小了问题&#34;我还使其成功,但没有任何幻想。我刚刚使用了基本的jQuery!

请注意,jQuery写得很好,易于理解API。我在这里使用的所有内容都很容易找到there

CodeSnippet

&#13;
&#13;
function buildList(data) {
	if (data) {
		var videoHTML = $('<ul />'),
			clearFix = $('<div />', { 'class': '' }),
			items = [];
		$.each(data.streams, function(i, video){
			if(i < 9) {
				var videoDate = video.channel.created_at,	//	$.format.date(video.channel.created_at, "MMM dd yyyy"),
					li = $('<li />', { 'class': 'video-stream' }).addClass(video.channel.language).appendTo(videoHTML),
					div = $('<div />', { 'class': 'user-background' }).appendTo(li),
					imgLogo = $('<img />', { alt: 'user image', 'class': 'user-logo' }).attr('src', video.channel.logo).appendTo(div),
					pUser = $('<p />', { 'class': 'user-name', html: video.channel.display_name }).appendTo(div),
					a = $('<a />', { href: 'javascript:void 0' }).data('vidName', video.channel.name).appendTo(li),
					imgPrev = $('<img />', { 'class': 'video-image' }).attr('src', video.preview.medium).appendTo(a),
					h1 = $('<h1 />', { 'class': 'game-name' }).appendTo(li),
					br = $('<br />').appendTo(li),
					ita = $('<i />').appendTo(li),
					span = $('<span />', { 'class': 'views-number' }).html(video.viewers).appendTo(li),
					pDate = $('<p />', { 'class': 'short-date-format' }).addClass('date' + i).appendTo(li);
				
				//	And now we can zero in on your issue with ez, by moveing that one thing here
				try {
					console.log(video.channel.video_banner);
					div.css('backgroundImage', 'url("' + video.channel.video_banner + '")');
				}
				catch(err) { console.log(err); }
			}
			else return false;
		});
		$('#placeholder').append(videoHTML, clearFix);
	}
}
$(function() {	//	jQuery shorthand for $(document).ready(function(){
	$.getJSON("https://api.twitch.tv/kraken/streams", buildList);
  //  the following uses our STATIC element to assign click event to our DYNAMICALLY added anchors
	$('#placeholder').on('click', '.video-stream a', function(e) { popup($(this).data('vidName')); });
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="placeholder"></div>
&#13;
&#13;
&#13;

jsFiddle for playing!