0

我想为表格行添加一些额外的属性。该表是根据从服务器返回的数据动态创建的

在 HTML 上定义的表:

然后,假设我有一些来自服务器的 json 数据(数据简化):

people = [{name:"John Doe", person_id:"1234"}, {name:"Jane Roe", person_id:"5678"}]

我现在用以下代码填写表格(在我的 ajax.done 处理程序中):

for( i=0; i<people.length; ++i ) {
    var person = people[i];
    var row = $('<tr><td>' + person.name + '</td></tr>');
    row.person_id = person.person_id;      // <<=== HERE I'm trying to add the expando
    row.click( clickHandler );
    $('#myTable > tbody').append(row);
}


function clickHandler( ev ) {
    row = ev.currentTarget;               // This is fine
    id = ev.currentTarget.person_id       // HERE unable to get my expando
}

我几乎可以肯定,对于普通的 HTML 对象(即 document.createElement('TR'),没有任何 JS 以及 Javascript 对象,这种语法是有效的。使用 jQuery 会发生其他事情。

(注意,有很多方法可以解决它,但出于教育目的,我真的很想知道如何使用 expandos 和 jQuery)。

4

2 回答 2

1

您正在设置person_idjQuery 集合对象,而不是 DOM 元素。jQuery 等价物是row.prop('person_id', person.person_id);.

也就是说,要保留随机数据位以及 DOM 元素,您应该使用attr()data()

于 2012-05-13T15:12:32.227 回答
1

row.person_id = person.person_id; 

应该

row[0].person_id = person.person_id; 

row是jquery wrapper,但是row[0]是DOM Element。

于 2012-05-13T15:14:39.827 回答