jQuery - 使用JS变量作为参数传递HTML

时间:2013-05-20 09:33:07

标签: jquery ajax

我有一个名为“X”的命名空间,它有一个getJSON函数,用于从服务器获取某些文件。我希望使用不同的内容重用此命名空间。这是代码:

var uid = "27D76901-B6B1-B332-918B-D9F5A7152EFC";
var X = {
    el: "",
    elMarkup: "",
    url: "",
    initialize: function(el, elMarkup, url){
        $.getJSON(url, function(data){
            el.find("p").remove().end();
            $.each(data.comments, function(key, value){
                el.append(elMarkup);
            })
        })
    }
};

X.el = $("#comments");
X.elMarkup = "<p>"+ value.content +" by "+ value.user +"</p>";
X.url = "http://example.com/getComments?uid=" + uid;
X.initialize(X.el, X.elMarkup, X.url);

我遇到elMarkup循环的$.each变量问题。如何动态定义此变量?谢谢!

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

X.elMarkup = function(value) {
   return "<p>"+ value.content +" by "+ value.user +"</p>";
};

然后在你的$.getJSON()回调中:

        $.each(data.comments, function(key, value){
            el.append(elMarkup(value));
        });

也就是说,不要将X.elMarkup定义为字符串,而是将其定义为生成所需特定html结构的回调函数。然后,您的通用initialize()函数只需调用elMarkup()并传递需要格式化的当前值。

请注意,如果您要将这些属性作为参数传递给X.el = ...函数,则将属性设置为X.initialize()并不合理。直接传递所需的值并使X.initialize()将值保存为属性(如果需要)更有意义。或者设置属性并调用X.initialize()不带参数。

答案 1 :(得分:1)

更改以下内容:

$.each(data.comments, function(key, value){
    el.append(elMarkup);
})

$.each(data.comments, function(key, value){
    el.append($('<p />', {"html": value.content + " by " + value.user}));
})

因为我在评论中提到的原因。