2013-03-07 86 views
0

我掙扎了一下。我試圖利用爲元素分配自定義屬性的很酷的功能。但它不起作用。問題與jQuery數據

基本上,我試圖分配多個元素到該行TR元素標識信息。下面是它的樣子:

for (x=0; x< theData.length; x++) 
{ 
    // create table row 
    var selector = "wc_" + wID + "_row_" + x; 

    oRow = document.createElement("TR"); 
    oRow.setAttribute("id", selector); 
    tBodyO.appendChild(oRow); 
    var rowCount = 0; 
    var identCnt = 0; 
    for (var index in theData[x]) 
    { 
     identCnt = 0; 
     if (hasIdentify) 
     { 
      for (y=0; y < theIdent.length; y++) 
      { 
       console.log("ROW: "+x+" , checking: "+index+" === "+theIdent[y]["data_name"]); 
       if (index === theIdent[y]["data_name"]) 
       { 
        myrow = $("#" + selector); 
        //myrow.attr("test","works"); 
        console.log("ident Dataname: "+theIdent[y]["data_name"]+ " identify:"+theIdent[y]["identify"]+" value: "+theData[x][index]); 
        jQuery.data(myrow, "test", { first: 16, last: "pizza!" }); 
        alert(myrow.data("test")); 
       } 
      } 
     } 
    } 
} 

我遺漏了一些並不真正相關的代碼,但我希望你能得到圖片。我想要做的是這樣的:

我有一個數組包含有關特定行數據的「身份」信息。它可以有0個,1個或更多個這樣的身份片段。我想將這些作爲自定義數據屬性存儲在<TR>元素上。

每個數據將具有明顯的key(例如:i_0_1其中0是數據行數,1是單位計) 但是,我不能得到這個工作。我已經嘗試了很多替代方案,甚至試圖求助於.attr()而沒有運氣。我究竟做錯了什麼??

我收到一條提示,提示undefined。當我嘗試myrow.attr("test","works");路由時,我可以看到DOM中的屬性。爲什麼data()的方式不適合我?

+4

它代替什麼?請注意,設置'data()'將***不會實際設置元素的屬性或屬性; jQuery將這些數據存儲在內部緩存中,並且僅將*映射到您選擇的元素。此外(這與您的問題無關,但只是一個參考),您應該使用'var'聲明變量,否則它們將最終成爲隱式全局變量,它們是* bad *。 – Matt 2013-03-07 21:11:27

回答

0

我剛纔發現了什麼問題。我猜在閱讀了jQuery.data()的文檔之後,我沒有看到有人真的很清楚地發現並說:

當你看源代碼時,你不會看到DOM元素中的數據信息。

爲了每個人的信用在這裏,他們告訴我的,我只是不知道我在讀什麼(現在我知道什麼是預期)

馬特寫道: 「生病不實際設置的屬性或屬性; jQuery將此數據存儲在內部緩存中,並僅將其映射到您選擇的元素「

儘管玩過.attr()和setAttribute()函數後,我變得更加困惑。

謝謝大家!