【问题标题】:Trying to add an HTML class attribute to jQuery object尝试将 HTML 类属性添加到 jQuery 对象
【发布时间】:2016-07-16 07:09:14
【问题描述】:

我正在尝试从 HTML div 元素中获取类名并将其添加到现有对象中。令人抓狂的是我可以让它工作,但是我放入的每个语法错误检查器都说代码是错误的。我已经搜索得相当彻底,但我什至不知道如何表达这个问题,真的。这是不会引发错误的代码:

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

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

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

对象 {label: "level3a", field: "在没有无处不在的元服务的情况下完全接受点击和迫击炮数据。"}

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

$.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: "在没有无处不在的元服务的情况下完全接受点击和迫击炮数据。"}

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

【问题讨论】:

    标签: javascript jquery html oop


    【解决方案1】:

    虽然我不能告诉你为什么这是错误的(或者为什么它有效),但我可以告诉你一个更“正确”的方法。

    您可以像这样将add 声明为一个空对象:add = {};

    然后您可以将字段作为属性添加到它,如下所示:add[field] = value;

    这将为您提供一个对象add,其模型为:{ ClassA: "Your text here" }

    请参阅属性访问器的类型以获取更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors。上面详述的方法使用“括号表示法”

    编辑:所以显然在 ECMA6 中,您编写的是有效的 javascript,使用所谓的 ComputedPropertyName。然而,并不是所有的浏览器都支持它,所以在浏览器对 ECMA6 的支持变得更好之前,最好使用括号符号属性名称方法。有关更多信息,请参阅此答案:https://stackoverflow.com/a/2274327/2748503

    【讨论】:

    • 这给了我一个可行的解决方案——感谢您的回答和其他信息!
    • 嘿,看看我的编辑,我找到了为什么你的代码有效的答案。
    猜你喜欢
    • 2013-08-02
    • 2014-09-18
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2015-09-21
    • 2015-11-15
    相关资源
    最近更新 更多