2016-06-19 2 views
1

У меня есть элемент div, который генерируется библиотекой javascript. Предположим, что ID для него autoКак appendChild сгенерированный div под созданным вручную div?

И я вручную создал элемент div HTML с идентификатором manual.

Как переместить сгенерированный div#auto в div#manual?

Элементы div, которые сгенерированы, не являются частью дерева документа. Так что я не могу просто appendChild положить auto под manual

Любая идея?

var element = document.createElement("div"); 
 
element.id = 'generated'; 
 

 
var el = document.getElementById('element'); 
 
console.log(el)
<div id="manual">Place #generated as child of me</div>

Как вы можете видеть, я не могу предназначаться сгенерированный DIV элемент #generated, потому что это не в дереве документа. Если я не могу выбрать его, я не могу разместить его под #manual.

+3

Пожалуйста, покажите код. – Mairaj

+1

Библиотека не должна возвращать идентификатор, который является способом бедного человека ссылаться на элементы DOM и не может быть использован для их поиска, если они уже не находятся в дереве. Вместо этого он должен вернуть сам элемент DOM, который вы могли бы просто вставить в 'manual'. –

+0

В этом [bin] (http://jsbin.com/midaya/edit?html,css,js,output) я делаю именно это. Разве нет? –

ответ

1

В коде:

var element = document.createElement("div"); 
element.id = 'generated'; 

var el = document.getElementById('element'); 
console.log(el) 

element является уже ссылка на элемент. Нет никаких причин, чтобы попытаться найти его снова через getElementById; просто используйте ссылку, которую у вас есть. getElementById не найдет его, потому что его еще нет в DOM.

Так просто использовать element:

var element = document.createElement("div"); 
element.id = 'generated'; 

document.querySelector("#manual").appendChild(element); 
// -------------------------------------------^ 

В что точка, это в DOM и getElementById бы найти его (хотя, опять же, вам не нужно, у вас уже есть ссылка на него в element).

Живой пример: (я добавил границы и дал сгенерированного DIV некоторое содержание, чтобы понять, что результат)

var element = document.createElement("div"); 
 
element.id = 'generated'; 
 
element.innerHTML = "generated"; 
 

 
document.querySelector("#manual").appendChild(element);
div { 
 
    border: 1px solid black; 
 
    padding: 2px; 
 
}
<div id="manual">Place #generated as child of me</div>

Обратите внимание, что нет никакой необходимости id на сгенерированном div, чтобы вы это сделали. Если у вас есть причина разных для него, имеющего id, это хорошо, но вам не нужно для этого:

var element = document.createElement("div"); 
 
element.innerHTML = "generated"; 
 

 
document.querySelector("#manual").appendChild(element);
div { 
 
    border: 1px solid black; 
 
    padding: 2px; 
 
}
<div id="manual">Place generated div as child of me</div>

+0

Это должен быть принятый ответ. – lindsay

+0

Спасибо! И в этом проблема. Если вы проверяете источник, #generated не помещается в качестве дочернего элемента в #manual. Потому что #generated еще нет в документе. Как вставить сгенерированный элемент div в дерево документа? Divs, которые написаны в HTML (в дереве документов). Divs, которые кодируются JS (не в дереве документов). – Vennsoh

+0

@Vennsoh: * «Если вы проверите источник, #генерированный не будет помещен как дочерний элемент под #manual.» * «View Source» не показывает вам текущее состояние DOM, он показывает, что вы отправили HTML с сервера. Чтобы увидеть текущее состояние DOM, в современных браузерах вы можете щелкнуть правой кнопкой мыши элемент и выбрать «Осмотреть» или «Проверить элемент». –

Смежные вопросы