Group Li Into Ul Based On Dash '-'
I got a code dropdown like this:
Solution 1:
Yes, you should be able to use the dashes, provided that the level is always the number of dashes divided by three. The key is to use a stack. It also helps to have a function to count the dashes.
// Helper function.functioncountLeadingChars(str, ch) {
for (var i = 0; i < str.length; i++) {
if (str.charAt(i) !== ch) {
return i;
}
}
return str.length;
}
var stack = [];
$('#Folder').children().each(function() {
var$option = $(this);
var text = $option.text();
// Count the dashes.var dashes = countLeadingChars(text, '-');
// Level is # of dashes divided by 3.var level = dashes / 3;
// Remove anything in the stack beyond the current level.// This will cause new <ul>s to get created when higher// levels are encountered again.if (stack.length > (level + 1)) {
stack.length = level + 1;
}
// Get the <ul> for the level, creating it if it doesn't exist.var$ul = stack[level];
if (!$ul) {
$ul = $('<ul/>');
stack[level] = $ul;
// Add the <ul> to the last <li> of the parent <ul>.if (level > 0) {
stack[level - 1].children(':last').append($ul);
// Add the "class" to the <ul>.var parentText = $ul.parent().text();
var index = parentText.lastIndexOf(' ');
$ul.addClass('something' + parentText.slice(index + 1));
}
}
// Create the <li> and add it to the <ul>.
$('<li>' + text.slice(dashes) + '</li>').appendTo($ul);
});
// At this point, stack[0] is the top-most <ul>.
EDIT: I just noticed you wanted a "class" on the <ul>
elements I added the code for that above.
Solution 2:
See the tag optgroup and if it solves your problem
Post a Comment for "Group Li Into Ul Based On Dash '-'"