Проблема здесь в том, что обозначение в квадратных скобках применяется слишком много.gparentId - это строка.У него нет свойства с именем parentId.Поэтому вы должны сделать это в два этапа.Сначала получите:
window[gparentId]
Затем получите соответствующее свойство этого объекта
var parentobj = window[gparentId][parentId];
На несколько не связанной ноте это не очень хорошо написанный код JavaScript:
Создание объектов
При создании новых объектов всегда используйте следующий синтаксис:
var obj = {};
Это то, что принято считать стандартным, поэтому людям легче читать.
Объявление переменных в операторах If
На самом деле не следует объявлять переменные внутри оператора if, особенно при объявлении той же переменной в блоке else, это действительно сбивает с толку.Вместо этого объявите все переменные в верхней части списка, а затем используйте их без ключевого слова var внизу.
var newdiv = document.createElement("div"),
newexpctrl = document.createElement("div"),
parentid = parent.getAttribute("id"),
parentobj;
Обратите внимание на запятые вместо точек с запятой, что означает, что мне не нужно повторятьключевое слово var.Так как значения newdiv, newexpctrl и parentid в обоих случаях одинаковы, я сразу даю им их значения, что делает содержание оператора if намного короче и проще для восприятия.*
Обратите внимание, что я оставил var _parentId внутри if, так как я думаю, что это, вероятно, улучшает читабельность, но вы можете выбрать его вне if, так как это в любом случае будет загрязнять пространство имен функции.