动态样式列表视图

时间:2014-08-06 16:10:42

标签: javascript jquery html css jquery-mobile

我正在从ajax调用Web服务生成列表视图。

这是代码:

var ajax = {  
parseJSONP:function(result){  
    movieInfo.result = result.results;
    $.each(result.results, function(i, row) {

        console.log("Title" + row.title);


        $('#movie-list').append('<li><a href="" data-id="' + row.id + '">`<img src="http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w185'+row.poster_path+'"/>`<h3>' + row.title + '</h3><p>' + row.vote_average + '/10</p></a></li>');
    });

    $('#movie-list').listview('refresh');
}

};

我需要的是让<img src="http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w185'+row.poster_path+'"/>填充行元素的背景并将行高增加30%。问题是我无法通过列表视图创建来插入css。

有办法做到这一点吗?我是javascript和jQuery mobile 1.4.3的新手。

最好的问候

2 个答案:

答案 0 :(得分:1)

我注意到的一些事情:

  • 您正在调用jquery选择器以多次获取具有movie-list id的元素,因为选择器处于循环中。而不是使用jquery一遍又一遍地查找相同的元素,您应该将其设置为变量并重复使用它!

  • 您正在使用字符串连接创建html。虽然这通常适用于少量动态html,但很快就很难维护。我建议创建DOM元素并将它们相互附加(不使用jquery),而不是制作一个巨大的html字符串。

  • 您正在javascript中构建html!如果可能的话,我建议调整你的API以返回你需要的html块并构建它的服务器端而不是构建它的客户端。如果你构建了html服务器端,那么你可以利用你正在使用的任何渲染框架(PHP,Jade,JSF等......)并将html写为html。

考虑到这些因素,设置background-image样式属性应该可以正常工作。您可能还需要使用background-repeat和background-size来获得所需的效果。

这是我想出的:

var ajax = {
    parseJSONP:function(response){
        var results = response.results;
        movieInfo.result = results;

        var $movieList = $("#movie-list");

        for(var i = 0; i < results.length; i++) {
            var row = results[i];

            console.log("Title: " + row.title);

            var listItem = document.createElement("li");
            var anchor = document.createElement("a");
            var header = document.createElement("h3");
            var paragraph = document.createElement("p");

            anchor.setAttribute("href", "");
            anchor.setAttribute("data-id", row.id);

            header.textContent = row.title;
            paragraph.textContent = row.vote_average + "/10";

            var backgroundImageUrl = "http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w185" + row.poster_path;
            listItem.style.backgroundImage = "url('" + backgroundImageUrl + "')";
            listItem.style.backgroundRepeat = "no-repeat";
            listItem.style.backgroundSize = "cover";

            anchor.appendChild(header);
            anchor.appendChild(paragraph);
            listItem.appendChild(anchor);

            $movieList.append(listItem);
        }

        $movieList.listview('refresh');

        //increases the height of each list item by thirty percent
        $movieList.find("li").each(function(index, element) {
            var $element = $(element);
            $element.css("height", ($element.offset().height * 1.3) + "px");
        });
    }
};

答案 1 :(得分:0)

使用html追加如下:

$('#movie-list').append('<li style="background:url(http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w185'+row.poster_path+') no-repeat; height:30%;"><a href="" data-id="' + row.id + '"><h3>' + row.title + '</h3><p>' + row.vote_average + '/10</p></a></li>');