Задать вопрос
toffi77
@toffi77

Как подгружать xml с перерисовкой таблицы?

Добрый день. Подскажите, пожалуйста, как сделать, чтобы таблицы заменялись, а не заполняли страницу, выстраиваясь друг под другом. То есть необходимо, чтобы при нажатии на ссылку появлялась другая таблица, а у меня они появляются друг за другом.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>METANIT.COM</title>
    <style>
        table, th, td { border: 1px solid black; border-collapse: collapse; }
        th, td { padding: 5px; }   
    </style>
</head>
<body>
<nav><a href="users">Users</a> | <a href="users2">Users2</a> | <a href="users3">Users3</a></nav>
<div id="content"></div>
<script>
const contentDiv = document.getElementById("content");

function loadContent(fileName){
const xhr = new XMLHttpRequest();
xhr.onload = () => {
    if (xhr.status == 200) {
        const xmlDoc = xhr.responseXML;
        const table = createTable();      
        // выбираем все элементы user     
        const users = xmlDoc.getElementsByTagName("user");      
        for (let i = 0; i < users.length; i++) { 
            const user = users[i];        
            const userName = user.getAttribute("name"); 
            const userAge = user.getAttribute("age"); 
            const contact = user.querySelector("contacts email").textContent;
            const row = createRow(userName, userAge, contact);            
            table.appendChild(row);         
        }      
        contentDiv.appendChild(table);
    }
};

xhr.open("GET", fileName + ".xml");
xhr.responseType = "document"; 
xhr.setRequestHeader("Accept", "text/xml");
xhr.send();
}

// устанавливаем обработчик нажатия для кнопок
const links = document.getElementsByTagName("a"); 
for (let i = 0; i < links.length; i++) {
    links[i].addEventListener("click", (e)=>{
        loadContent(links[i].getAttribute("href"));
        e.preventDefault();
    });  
} 
// по умолчанию загружаем компонент home
loadContent("users");

// создаем таблицу
function createTable() {  
    const table = document.createElement("table");   
    const headerRow = document.createElement("tr");  
    const nameColumnHeader = document.createElement("th");  
    const ageColumnHeader = document.createElement("th");  
    const contactColumnHeader = document.createElement("th");
    nameColumnHeader.appendChild(document.createTextNode("Name"));  
    ageColumnHeader.appendChild(document.createTextNode("Age"));  
    contactColumnHeader.appendChild(document.createTextNode("Contacts"));  
    headerRow.appendChild(nameColumnHeader);  
    headerRow.appendChild(ageColumnHeader);  
    headerRow.appendChild(contactColumnHeader);
    table.appendChild(headerRow);
    return table;
}
// создаем одну строку для таблицы
function createRow(userName, userAge, userContact) {  
    const row = document.createElement("tr");  
    const nameColumn = document.createElement("td");  
    const ageColumn = document.createElement("td");  
    const contactColumn = document.createElement("td");  
    nameColumn.appendChild(document.createTextNode(userName));  
    ageColumn.appendChild(document.createTextNode(userAge));  
    contactColumn.appendChild(document.createTextNode(userContact));  
    row.appendChild(nameColumn);  
    row.appendChild(ageColumn);  
    row.appendChild(contactColumn);  
    return row;
}
</script>
</body>
</html>


import { createServer } from "http";
import { readFile } from "fs";
     
createServer((request, response)=>{
    // получаем путь после слеша, слеш - первый символ в пути
    let filePath = request.url.substring(1);
    // если пустой путь, отправляем главную страницу index.html
    if(!filePath) filePath = "index.html";  
    // в качестве типа ответа устанавливаем html
    response.setHeader("Accept", "text/xml; charset=utf-8;");
    readFile(filePath, (error, data)=>{
        if(error){                              // если ошибка
            response.statusCode = 404;
            response.end("<h1>Resourse not found!</h1>");
        }   
        else{
            response.end(data);
        }
    });
}).listen(3000, ()=>console.log("Сервер запущен по адресу http://localhost:3000"));
  • Вопрос задан
  • 69 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы