jquery expandos

时间:2012-05-13 15:09:02

标签: jquery expando

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

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)。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这个

row.person_id = person.person_id; 

应该是

row[0].person_id = person.person_id; 

row是jquery包装器,但row[0]是DOM元素。