添加带数据的div()

时间:2010-12-22 19:20:59

标签: javascript jquery ajax append

我正在生成一个flash SWF列表,该信息来自一个ajax调用,它返回一个json对象,我循环使用我的makeAppRow函数创建数据行。

makeAppRow = function(myData){
        var myStr = '<div class="fileEntry">'
      myStr = myStr +'<div class="appDate">'+dateFormat(myData.date_swf, "dS mmmm, yyyy, h:MM TT")+'</div>'
      myStr = myStr +'<div class="appName">'+myData.name_swf+'</div>'
      myStr = myStr +'<div class="appOptions" data>'
      myStr = myStr +'<div class="gotoAppBtn" data-options="'+myData+'">Open App</div>'
      myStr = myStr +'</div>'
      myStr = myStr +'</div>'
        $('#appData').append(myStr);
    }

我需要将json数据附加到gotoAppBtn,以便在单击时我可以读取附加的json对象的数据并在我的单击函数中使用它,因为你可以看到我已经尝试使用html5数据嵌入数据,但我无法使其工作。

 <div class="gotoAppBtn" data-options="'+myData+'">Open App</div>

我有一个功能,以便在单击按钮时加载swf。

$('.gotoAppBtn').live('click', function(){
        //alert('button clicked')
        var myData = $(this).data("options")
        alert('../userfiles/'+myData.id_ugp+'/'+myData.id_swf+'/'+myData.launchfile_swf+'')
        console.log(myData);
        var flashvars = {};     
        var params = {};
        params.menu = "false";
        params.quality = "best";
        params.scale = "noscale";       
        var attributes = {};
        attributes.id = "flashAppDisplay";
        attributes.name = "flashAppDisplay";
        swfobject.embedSWF(
            '../userfiles/'+myData.id_ugp+'/'+myData.id_swf+'/'+myData.launchfile_swf+'', 'flashAppDisplay', myData.width_swf, myData.height_swf,  myData.version_swf ,"../FAVideo/expressInstall.swf", flashvars, params, attributes)      
    });

但数据似乎并不存在,有关我出错的地方的指示,还是更好的方法来实现这一目标?

3 个答案:

答案 0 :(得分:1)

在将myData javascript对象放入属性之前,需要将其转换为字符串。 从json2.js查看JSON.stringify

您也可以使用.data()函数

$('#appData .gotoAppBtn:last').data("options",myData)

答案 1 :(得分:1)

如果您使用jquery创建HTML,则无需使用data-属性,因为您可以使用$.data设置数据。这是makeAppRow函数的严格jQuery版本。

$('<div class="fileEntry"></div>')
    .append('<div class="appDate"></div>')
    .find('.appDate')
        .html(dateFormat(myData.date_swf, "dS mmmm, yyyy, h:MM TT"))
        .end()
    .append('<div class="appName"></div>')
    .find('.appName')
        .html(myData.name_swf)
        .end()
    .append('<div class="appOptions"></div>')
    .find('.appOptions')
        .append('<div class="gotoAppBtn">Open App</div>')
        .find('.gotoAppBtn')
            .data(myData)
            .end()
        .end()
    .appendTo('#appData')

答案 2 :(得分:1)

您可以使用jquery .data()存储与html元素关联的任意数据。查看文档,您可以在makeAppRow函数 -

中附加这样的数据
$('#appData').append(myStr);

//After appending
div = $("div.gotoAppBtn")[0];
$.data(div, "data", { options: myData });

然后像这样检索它: -

$('.gotoAppBtn').live('click', function(){
   //alert('button clicked')

   div = $("div.gotoAppBtn")[0];
   var myData = $.data(div, "data").options