Используйте getElementById для вновь созданного объекта DOM, прежде чем он будет вставлен в документ - КАК? - PullRequest
4 голосов
/ 11 декабря 2010

Метод getElementById нельзя использовать, если к документу не прикреплен элемент DOM.Каким способом или механизмом я могу получить доступ и изменить элемент DOM, прежде чем он будет прикреплен к документу?

У меня есть большой элемент DOM, и я хочу получить доступ к его части.Я бы классически использовал getElementById, но элемент DOM не прикреплен к документу.

var element = document.createElement("div");  
element.id = 'testqq';  
var el = document.getElementById('testqq'); // el will be null!

источник: https://developer.mozilla.org/en/dom/document.getelementbyid

Я ищу ответ, в котором не используется jQuery.Я люблю jQuery, но это не вариант для моей текущей проблемы.

Ответы [ 2 ]

4 голосов
/ 11 декабря 2010

Ну, у вас уже есть ссылка на нее с вашей переменной element.

Но могу поспорить, ты имеешь в виду, что ты хочешь что-то вложенное внутрь. Если это так, вы можете использовать getElementsByTagName('*'), а затем выполнить итерацию по возвращенной коллекции, проверяя свойство ID, пока не найдете ваше.

var div = document.createElement('div');

div.innerHTML = '<p>yo</p><div><span id="tester">hi</span></div>';

var all = div.getElementsByTagName('*');

   // search for element where ID is "tester"
for (var i = 0, len = all.length; i < len; i++) {
    if (all[i].id === 'tester') {
        var result = all[i];
        break;
    }
}

alert( result.id );

Перед тем, как попробовать цикл, вы можете проверить, поддерживается ли querySelectorAll в браузере, и использовать его, если так.

if( div.querySelectorAll ) {
    var result = div.querySelectorAll('#tester');
} else {
    // Do the loop with getElementsByTagName()
}
0 голосов
/ 11 декабря 2010

Функция document.createElement возвращает новый объект-элемент, но этот элемент не существует в DOM , пока вы не вставите его .

Объект документа не помнит элементов, которые вы просили его создать, поэтому, когда вы вызываете document.getElementById('testqq'), он абсолютно не знает, что вы ищете.

В вашем примереу вас уже есть ссылка на элемент.Почему вы должны попросить документ для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...