J'ai ce html:Créer tableau, le regroupement en fonction des éléments enfants
<select id="this_id">
<option value="0" class="empty-item">Choose Type</option>
<optgroup label="FirstGrouping"></optgroup>
<option value="2">Thing1</option>
<optgroup label="SecondGrouping"></optgroup>
<option value="8">Thing4</option>
<option value="4">Thing3</option>
<optgroup label="ThirdGrouping"></optgroup>
<option value="7">Thing8</option>
<option value="5">Thing9</option>
</select>
Ce que je suis en train de faire est de créer un tableau qui ressemblerait à ceci:
"data": [{
"Label": "FirstGrouping",
"Options": ["Thing1"]
}, {
"Label": "SecondGrouping",
"Options": ["Thing4", "Thing3"]
}, {
"Label": "ThirdGrouping",
"Options": ["Thing8", "Thing9"]
}]
Il n'y a pas donné la commande de optgroup
et option
éléments. Donc, fondamentalement, j'ai besoin de grouper d'abord optgroup
et les éléments options
suivants dans le premier objet à l'intérieur du tableau data
. Où "Label"
est optgroup
et "Options"
sont tous les option
éléments avant le suivant optgroup
élément. Deuxième objet à l'intérieur data
a optgroup
"Label"
et "Options"
sont les option
éléments suivants avant l'élément optgroup
suivant. Etc.
Si optgroup
envelopperaitoption
éléments, alors que je pouvais faire quelque chose comme:
var yearz = [];
var yearz2 = $('#this_id');
yearz2.each(function() {
var thelabel = $(this).attr('label');
var lengthch = $(this).children().length;
var thisch = $(this).children();
var theobj = [];
var alls = [];
for (var i = 0; i < lengthch; i++) {
alls.push({
"Value": thisch.eq(i).val(),
"Text": thisch.eq(i).text()
});
}
theobj = {
Label: thelabel.trim(),
Options: alls
};
yearz.push(theobj);
});
Mais'optgroup' ne pas envelopper option
éléments. Y a-t-il une façon intelligente de le faire? Cordialement
Avez-vous le code HTML dans une chaîne ou dans la page courante/document? – trincot
@trincot Current page/document, 'casperjs' – user1665355
Les' optgroup' ne sont-ils pas supposés envelopper leurs 'option's? – connexo