Еще раз я заканчиваю тем, что отвечаю на свой собственный вопрос: P В случае, если это может быть полезно кому-то еще здесь, это идет.
Прежде всего, вот окончательный код:
/**
* Update Components
*/
function Update() {
/**
* Assign IDs to each section, row and module
*/
// Grab the sections contained in the canvas
var sections = document.querySelectorAll('#canvas [data-component="section"]');
if ( sections.length > 0 ) {
for ( var x = 0; x < sections.length; x++ ) {
// Increase num by 1 to avoid "0" as first index
var sectionNum = x + 1;
// Assign an ID to the current section
sections[x].id = 'component-' + sectionNum;
// Grab the rows contained in this section
var rows = document.querySelectorAll('#' + sections[x].id + ' [data-component="row"]');
if ( rows.length > 0 ) {
for ( var y = 0; y < rows.length; y++ ) {
// Increase num by 1 to avoid "0" as first index
var rowNum = y + 1;
// Assign an ID to the current row
rows[y].id = 'component-' + sectionNum + '-' + rowNum;
// Grab the modules contained in this row
var modules = document.querySelectorAll('#' + rows[y].id + ' [data-component="module"]');
if ( modules.length > 0 ) {
for ( var z = 0; z < modules.length; z++ ) {
// Increase num by 1 to avoid "0" as first index
var moduleNum = z + 1;
// Assign ID to module
modules[z].id = 'component-' + sectionNum + '-' + rowNum + '-' + moduleNum;
}
}
}
}
}
}
}
В итоге я определил переменные для строк и модулей в предыдущем цикле, и это, наконец, дало результат (определил переменную строк внутри цикла секций и переменную модулей внутри цикла строк). Если вы задаетесь вопросом, почему, именно потому, что, делая это таким образом, я смог использовать идентификатор текущего родителя, чтобы ограничить поиск дочерними объектами, содержащимися в этом конкретном родителе, а затем перезапустить счетчик при зацикливании нового родителя.
Это второстепенная деталь, но я также удалил сброс переменных цикла в конце каждого цикла, которые даже не были необходимы.
И, как плюс, в jQuery то же самое:
/**
* Update Components
*/
function Update() {
/**
* Assign IDs to each section, row and module
*/
// Grab the sections contained in the canvas
var sections = $('#canvas [data-component="section"]');
if ( sections.length > 0 ) {
$(sections).each( function(x) {
// Increase num by 1 to avoid "0" as first index
var sectionNum = x + 1;
// Assign an ID to the current section
$(this).attr('id', 'component-' + sectionNum);
// Grab the rows contained in this section
var thisSectionID = this.id;
var rows = $('#' + thisSectionID).find('[data-component="row"]');
if ( rows.length > 0 ) {
$(rows).each( function(y) {
// Increase num by 1 to avoid "0" as first index
var rowNum = y + 1;
// Assign an ID to the current row
$(this).attr('id', 'component-' + sectionNum + '-' + rowNum);
// Grab the modules contained in this row
var thisRowID = this.id;
var modules = $('#' + thisRowID).find('[data-component="module"]');
if ( rows.length > 0 ) {
$(modules).each( function(z) {
// Increase num by 1 to avoid "0" as first index
var moduleNum = z + 1;
// Assign an ID to the current module
$(this).attr('id', 'component-' + sectionNum + '-' + rowNum + '-' + moduleNum);
});
};
});
};
});
};
Надеюсь, это поможет кому-то там! :)