简体   繁体   中英

Trying to add an HTML class attribute to jQuery object

I'm trying to get the class name from an HTML div elements and add it to an existing object. What's maddening is that I can make it work, but every syntax error checker I put it into says the code is wrong. I've searched pretty thoroughly, but I don't even know how to phrase the question, really. Here's the code which DOESN'T throw the error:

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

But the problem is that it puts "field" in as a literal string for the field

object {label: "level3a", field : "Authoritatively enhance client-centric deliverables after sustainable expertise."}

object {label: "level3a", field: "Completely embrace clicks-and-mortar data without ubiquitous meta-services."}

not the class name value. To get around that, I put brackets around "field":

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

And it gives me the result I'm looking for,

object {label: "level3a", ClassA : "Authoritatively enhance client-centric deliverables after sustainable expertise."}

object {label: "level3a", ClassB: "Completely embrace clicks-and-mortar data without ubiquitous meta-services."}

but somehow it's incorrect. Any ideas on what I'm doing wrong here, or a better way to accomplish this?

While I can't tell you why that's wrong (or why it works, for that matter), I can tell you a more "proper" way to do it.

You'd declare add as an empty object like so: add = {};

Then you can add the field as a property to it like so: add[field] = value;

This will give you an object add with the model: { ClassA: "Your text here" }

Please refer to the types of property accessors for more info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors . The method detailed above uses "Bracket Notation"

Edit: So apparently in ECMA6 what you wrote is valid javascript, using what's called a ComputedPropertyName . However it's not supported by all browsers yet, so until browser support for ECMA6 gets better you're better off using the bracket-notation property name method. See this answer for more info: https://stackoverflow.com/a/2274327/2748503

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM