РЕДАКТИРОВАТЬ: сделал заголовок более конкретным для решения проблемы дублирования вопроса.
У меня есть HTML-страница с button
и div
. Когда пользователь нажимает кнопку, функция запускает XMLHttpRequest
, чтобы получить таблицу из файла XML. Таблица должна быть вставлена в div
.
Запрос AJAX возвращает object Element
моей переменной. Как я могу получить содержимое этой переменной (то есть <table><tr><td>...
и т. Д. Из файла XML) для вставки в div
?
Вот код JavaScript:
function table_loadContent() {
var request;
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
console.log("HTTPRequest");
} else {
request = new ActiveXObject("Microsoft.XMLHTTP");
console.log("ActiveX");
}
request.open('GET', 'myXMLFile.xml');
request.onreadystatechange = function() {
if ((request.readyState === 4) && (request.status === 200)) {
var newTable = request.responseXML.getElementsByTagName('table');
document.getElementById('myDiv').appendChild(newTable);
}
}
request.send();
}
Варианты, которые я пробовал, не работают:
document.getElementById("myDiv").innerHTML = myVar;
document.getElementById("myDiv").appendChild(myVar);
document.getElementById("myDiv").appendChild(myVar[0]);
- То же, что и выше, но с использованием второй переменной для хранения версии
.toString()
- попытался объявить файл XML как
XML
и какHTML
var newTable = request.responseXML.getElementById('myTable')
;
2 ответа
Мы нашли решение:
Изменяя строки:
Var newTable = request. responseXML.getElementsByTagName ('table') document.getElementById ( ' myDiv ') < сильный > .appendChild ( Новая_таблица )
Чтобы :
Var newTable = request. responseText document.getElementById ('myDiv'). innerHTML = newTable
Это работает так, как мы хотели бы. (Редактировать разочарование: я не могу заставить его разбивать строки правильно)
В следующем коде:
var newTable = request.responseXML.documentElement.getElementsByTagName('table');
Переменная newTable
является HTMLCollection, это это не элемент.
Если вы хотите добавить только первый элемент в коллекции, вы можете использовать:
document.getElementById('myDiv').appendChild(newTable[0]);
Если вы хотите добавить все узлы внутри коллекции, вам нужно выполнить итерацию в коллекции и добавить к div
каждый элемент, содержащийся в ней:
var newTable = request.responseXML.documentElement.querySelectorAll('table');
var myDiv = document.getElementById('myDiv');
[].forEach.call(newTable, function (table) {
myDiv.appendChild(table)
});
< STRONG> ПРИМЕЧАНИЕ :
1 - я использовал методquerySelectorAll
, потому что это не-живая коллекция HTMLCollection и может использоваться для измененияDOM
без изменения коллекции.
2 - Используйте свойствоdocumentElement
responseXML
, чтобы убедиться, что вы выбираете основной узел документа.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.