Вы пытаетесь сослаться на элемент DOM по идентификатору как дочерний элемент document
, когда этот элемент только создан, но еще не добавлен в document
.
Но у вас уже есть ссылка на элемент #myDivId
в переменной centerControlDiv
, поэтому вам не нужно использовать идентификатор для ссылки на него. Просто измените эту строку:
$('#myDivId').append("<div>UI widget</div>");
на:
$(centerControlDiv).append("<div>UI widget</div>");
Другими словами, чтобы ответить на ваш вопрос "Как узнать родителя" div с идентификатором 'myDivId' создан? ", этот div уже создан - вы создали его в вызове document.createElement('div')
. Он просто не является потомком document
.
Поэтому, когда вы используете $('#myDivId')
или подобные вызовы, такие как document.getElementById('myDivId')
, эти вызовы не могут его увидеть. Это просто автономный элемент, на который у вас есть ссылка, поэтому вы можете получить к нему доступ через этот элемент, а не искать его в документе DOM.
Обновление на основе вашего последнего кода:
To примените этот принцип к вашему uiWidget
классу, вы можете заставить класс работать с фактическим элементом div
, который вы создали, вместо того, чтобы обращаться к нему по ID. Еще лучше, поскольку вы используете jQuery, передайте ему объект jQuery с самого начала, например:
var uiWidget = new UiWidget( $(centerControlDiv) );
class UiWidget {
constructor($div) {
this.$div = $div;
this.$div.click($.proxy(this.event_click, this));
}
// ...
}
Как видите, для кода больше не требуется идентификатор Div вообще и ему тоже не нужно get $div()
. $div
и this.$div
уже являются объектом jQuery, обертывающим ваш centerControlDiv
.
Я также изменил имя класса на UiWidget
, чтобы следовать рекомендованному стилю JavaScript и избежать конфликта с uiWidget
переменная, которая содержит экземпляр класса.