尝试向jQuery对象添加HTML类属性

时间:2016-03-28 22:28:01

标签: javascript jquery html oop

我正在尝试从HTML div元素中获取类名,并将其添加到现有对象中。令我发狂的是我可以使它工作,但我说的每个语法错误检查都说代码是错误的。我搜索得非常彻底,但我甚至不知道该怎么说这个问题。这是不抛出错误的代码:

$.each( $(objDiv).children('div'), function(){
    var field = $(this).attr('class');
    var value = $(this).text();
    var add = { field : value };
    $.extend(obj, add);
});

但问题是它将“field”作为字段的文字字符串

对象 {label:“level3a”,字段:“在可持续专业知识之后,以权威方式增强以客户为中心的可交付成果。”}

对象 {label:“level3a”,字段:“完全接受点击实体数据而无需普遍存在的元服务。”}

不是类名值。为了解决这个问题,我在“字段”周围添加括号:

$.each( $(objDiv).children('div'), function(){
    var field = $(this).attr('class');
    var value = $(this).text();
    var add = { [field] : value };
    $.extend(obj, add);
}

它给了我正在寻找的结果,

对象 {label:“level3a”, ClassA :“在可持续专业知识之后,以权威方式增强以客户为中心的可交付成果。”}

对象 {label:“level3a”, ClassB:“完全接受点击实体数据而不使用无处不在的元服务。”}

但不知何故,这是不正确的。关于我在这里做错了什么的想法,或者更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:3)

虽然我不能告诉你为什么会出错(或者为什么它会起作用),但我可以告诉你一个更好的"正确的"这样做的方法。

您将add = {};声明为空对象,如下所示:add[field] = value;

然后您可以将字段作为属性添加到其中:add

这将为您提供一个对象{ ClassA: "Your text here" },其中包含模型:Quantity Unit Price Total Percentage 1 5 5 Infinity 2 5 10 2 3 5 15 1 Grand Total 30

有关详细信息,请参阅属性访问者类型:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors。上面详述的方法使用" Bracket Notation"

编辑:显然,在ECMA6中,您编写的内容是有效的javascript,使用的是名为 ComputedPropertyName 的内容。但是,目前并非所有浏览器都支持它,因此在ECMA6的浏览器支持变得更好之前,您最好使用括号 - 表示法属性名称方法。有关详细信息,请参阅此答案:https://stackoverflow.com/a/2274327/2748503