1

本问答中所述,可以使用适当的属性创建 JQuery 对象。例如:

jQuery('<div/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!'
}).appendTo('#mySelector');

作为其中的一部分,可以添加数据字段,以便您拥有:

jQuery('<div/>', {
    id: 'foo',
    data: ('meta', 'my-meta-data'),
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!'
}).appendTo('#mySelector');

data-meta='my-meta-data'这将在 div 'foo' 中创建数据字段。

现在,如果我有一个对象

var my_data = {
    meta1: 'my-meta-data-1',
    meta2: 'my-meta-data-2'
}

创建 JQuery 对象时,我将如何在数据字段中使用该对象?如果我能说就太好了

jQuery('<div/>', {
    id: 'foo',
    data: my_data,
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!'
}).appendTo('#mySelector');

但这太容易了。

注意:我虽然data: (key, value)有效,但我一直在尝试,但似乎没有。尽管如此,我的问题仍然存在。

4

2 回答 2

1

试试这个:

jQuery('<div/>', {
    id: 'foo',
    data: { "my_data": my_data},
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!'
}).appendTo('#mySelector');

var m1 = $("div").data("my_data").meta1;

改编自@Vega 的小提琴。FIDDLE(注意:如果您更喜欢该方法,则没有“/ 1”的原始小提琴也可以使用。)

于 2013-06-19T16:46:28.487 回答
1

您的一个问题是为什么这不起作用:

data: ('meta', 'my-meta-data'),

您在('meta', 'my-meta-data')表达式中使用逗号运算符。逗号运算符评估它的两个参数 - 在这种情况下'meta''my-meta-data'然后丢弃第一个,返回第二个。

鉴于这两个参数都是字符串常量,对第一个参数求值什么都不做,所以剩下的就是:

data: ('my-meta-data'),

或者简单地说:

data: 'my-meta-data',

如您所知,这不是这里所需要的。

您可以在 Chrome(或其他浏览器)开发者控制台中试验这些表达式。这是逗号表达式:

> ('meta', 'my-meta-data')
  "my-meta-data"

因此,如果我们尝试使用对象字面量:

> { 'meta': 'my-meta-data' }
  SyntaxError: Unexpected token :

糟糕,由于 JavaScript 解析中的一个怪癖,这不起作用:对象文字本身不会被识别为表达式。我们需要括号括起来(在大多数情况下,在实际代码中使用对象字面量时不需要括号):

> ({ 'meta': 'my-meta-data' })
  Object {meta: "my-meta-data"}
于 2013-06-19T16:57:59.813 回答