I am a little bit lost. I am getting this JSON:
[{
"id": "210",
"name": "Name 1",
"category": "Category 1"
}, {
"id": "187",
"name": "Name 2",
"category": "Category 1"
}, {
"id": "186",
"name": "Name 3",
"category": "Category 1"
}, {
"id": "185",
"name": "Name 4",
"category": "Category 1"
}, {
"id": "184",
"name": "Name 5",
"category": "Category 1"
}, {
"id": "183",
"name": "Name 6",
"category": "Category 1"
}, {
"id": "182",
"name": "Name 7",
"category": "Category 1"
}, {
"id": "181",
"name": "Name 8",
"category": "Category 2"
}, {
"id": "180",
"name": "Name 9",
"category": "Category 3"
}, {
"id": "178",
"name": "Name 10",
"category": "Category 2"
}]
And I would like to put all of this in a select with options and optgroups. Actually the optgroup should be category
I would like something like this:
<select name="products" class="product" id="product">
<optgroup label="Category 1">
<option value="210">Name 1</option>
<option value="187">Name 2</option>
<option value="186">Name 3</option>
<option value="185">Name 4</option>
...
</optgroup>
<optgroup label="Category 2">
<option value="181">Name 8</option>
<option value="178">Name 10</option>
</optgroup>
<optgroup label="Category 3">
<option value="180">Name 9</option>
</optgroup>
Today I have only made this because I'm struggling too much:
$(document).ready(function () {
$.getJSON("5.php", {
val: $(this).val()
}, function (data) {
$.each(data, function (i, item) {
$("<option/>").attr("value", item.id).append(item.name).appendTo("optgroup");
});
});
});
As you can see no optgroup :) Is there a way to do this? I can also modify my JSON if it can make it easier.
Thanks for any help.
I know this thread is very old, but I was needing something similar and I came up with this. It automatically adds optgroups when needed and populate them with options. Plus, it works both when you have optgroups and when you don't.
http://jsfiddle.net/mzj0nuet/
Assuming the optgroups already exist, change this...
to this...
http://jsfiddle.net/FG9Lg/
If they don't exist, you need to create them, though I'd suggest a restructuring of your JSON response to have each item nested under the proper category.
Like this...
So you could then do this:
http://jsfiddle.net/FG9Lg/1/
In case you would like to keep you JSON format as is, the following would answer your question:
Hope this helps!
If I were you, I would use a small library called Underscore to group the data which is returned in a easier representation.
See this code below and you may also see this live demo:
If you hesitate to use Underscore library, you may consider this
groupBy
function:USAGE: