Добавление элемента и работа с ним
Написал функцию:
function d_c(d,n_id,el) {
var alien;
var attr;
attr = document.createAttribute("id");
attr.value=n_id;
var enemy = document.getElementById(d);
alien = document.createElement( el );
alien.setAttribute( attr );
enemy.appendChild( alien );
}
В опере и фф работает прекрасно, но в ие нет, когда берётся getElementById , то пишет, что заданного элемента не существует( Как сделать, что бы это работало в ие? |
Плз, пмогите
|
Странно, а функция точно вызывается тогда, когда элемент уже получен в браузер?
|
Содержание ещё не получено, обязательно сразу создавать с содержанием?
|
Да, эта функция должна вызываться тогда, когда элемент с соответствующим id уже находится в модели DOM. Например при событии window.onload или document.body.onload. Ну или сразу после этого элемента в тегах <script>.
|
Не, элемент, в который это добавляется уже загружен, через такую функцию добавляется туда элемент, в который другая функция вставит содержимое
|
Если ошибка действительно в том, что getElementById() не может найти элемент, значит этого элемента нету. Посмотрите, может не работает та функция, которая создает этот элемент (если такая есть)? В общем, тут сложно сказать... Выложите больше листингов вашего кода, может сможем разобраться.
|
Вложений: 1
В фф и опере работает всё нормально.
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function x_r(lnk,id) {
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', lnk, true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
document.getElementById(id).innerHTML = xmlhttp.responseText;
}
}
};
xmlhttp.send(null);
}
function d_c(d,n_id,el) {
var alien;
var attr;
attr = document.createAttribute("id");
attr.value=n_id;
var enemy = document.getElementById(d);
alien = document.createElement( el );
alien.setAttribute( attr );
enemy.appendChild( alien );
}
И это вызывается
d_c('t_1','f_1','span');
x_r('own.php?id=1','f_1');
Самое главное, что firebug'у всё нравится На другой машине поставил ie 8b1 (там есть js дебагер), и он мне выдал ошибку: http://javascript.ru/forum/attachmen...1&d=1215411866 И указал на строчку: document.getElementById(id).innerHTML = xmlhttp.responseText; Я как понял, он хочет работать с элементом, который ещё не создался, как это можно избежать?? Сделал такую фишку:
function d_c(d,n_id,el) {
var alien; alert('1');
var attr; alert('2');
attr = document.createAttribute("id"); alert('3');
attr.value=n_id; alert('4');
var enemy = document.getElementById(d); alert('5');
alien = document.createElement(el); alert('6');
alien.setAttribute( attr ); alert('7');
enemy.appendChild( alien ); alert('8');
}
И вот, в фф и опере алертами доходит до 6-ти (включительно) , но скрипт выполняется правильно, но дом инспектор не видит появившийся элемент, что странно. В ие доходить как и нужно до 8-ми, но скрипт не работает. Всё, заработало)))))), код:
function d_c(d,n_id,el) {
var enemy = document.getElementById(d);
var bax = document.createElement(el);
bax.setAttribute('id', n_id);
enemy.appendChild(bax);
}
Но писать приходится не innerHTML, а document.getElementById(id).appendChild( document.createTextNode(xmlhttp.responseText)) ; Как можно сделать, чтоб так выводилось нормально, а не хтмл кодом? |
Цитата:
|
innerHTML заработал
|
| Часовой пояс GMT +3, время: 19:19. |