• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z pętlą w JS

Object Storage Arubacloud
+1 głos
233 wizyt
pytanie zadane 6 stycznia 2016 w JavaScript przez Ehlert Ekspert (212,670 p.)

Witam,

document.getElementById("p7").innerHTML += "<table>";
    for(var x = 0; x < 2; x++){        
        document.getElementById("p7").innerHTML += "<td></td>";
        
        document.getElementById("p7").innerHTML += "aaaa";
    }
    document.getElementById("p7").innerHTML += "</table>";

No więc pętla się wykonuje. Co ciekawe efekt wygląda tak:

<p id="p7"><table></table>aaaaaaaa</p>

Popełniam głupi błąd którego nie widzę? sad

2 odpowiedzi

+1 głos
odpowiedź 6 stycznia 2016 przez Comandeer Guru (600,810 p.)
wybrane 6 stycznia 2016 przez Ehlert
 
Najlepsza

Prawdopodobnie przeglądarka po prostu poprawiła stworzony przez Ciebie kod. HTML przekazany do innerHTML jest "naprawiany" przez przeglądarki, stąd też najpierw się składa cały string, a dopiero później próbuje go wstawić do elementu.

Inna rzecz, że Ty próbowałeś wsadzić tekst bezpośrednio do table, z pominięciem tr i td. Stąd przeglądarka usunęła wadliwy kod.

komentarz 6 stycznia 2016 przez Ehlert Ekspert (212,670 p.)

Moim skromnym zdaniem poniższy kod jest poprawny: 

    document.getElementById("p7").innerHTML += "<table><tbody><tr>";
    for(var x = 0; x < 2; x++){        
        document.getElementById("p7").innerHTML += "<td>aaaa</td>";
    }
    document.getElementById("p7").innerHTML += "</tr></tbody></table>";

Da się pominąć ingerencję przeglądarki? 

komentarz 6 stycznia 2016 przez Comandeer Guru (600,810 p.)

Nie jest. Z prostej przyczyny: w chwili, gdy doklejasz coś do elem.innerHTML, przeglądarka musi przebudować drzewko DOM danego elementu. Jeśli w tym momencie dostanie jedynie fragment kodu, to nie będzie w stanie zbudować poprawnego drzewka DOM. Stąd musi dostać cały kod HTML:

var html = '<table>';

for ( var i = 0 ; i < 10; ++i ) {
    html += '<tr><td>' + ( i + 1 ) + '</td></tr>';
}

html += '</table>';

elem.innerHTML = html;

 

0 głosów
odpowiedź 6 stycznia 2016 przez Tricker Bywalec (2,630 p.)
1. Tabela zawiera wiersze (<tr>), a w nich komórki (<td>), Ty zapisujesz jedynie komórki, a do tego tekst znajduję się poza nimi...,także nie ma to prawa działać jak powinno.

2. Kolejną rzeczą jest to, że istnieją specjalne polecenia dla tabel.
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement/insertRow
https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement/insertCell
komentarz 6 stycznia 2016 przez Ehlert Ekspert (212,670 p.)
<p id="p7"><table><tbody><tr></tr></tbody></table>aaaaaaaa</p>

Efekt Twojej pętli crying

komentarz 6 stycznia 2016 przez Tricker Bywalec (2,630 p.)

Z pośpiechu tak wyszło, ponieważ wcześniej nie wpadłem na pomysł by obsługiwać tabelę w taki sposób, natomiast już się poprawiam:
 

var tableContent = "";
for(var x = 0; x < 2; x++){        
        tableContent += "<td>aaaa</td>";
   }
document.getElementById("p7").innerHTML += "<table><tr>" + tableContent + "</tr></table>";

 

Podobne pytania

–1 głos
4 odpowiedzi 172 wizyt
pytanie zadane 22 marca 2017 w JavaScript przez paciek Początkujący (480 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 28 stycznia 2017 w JavaScript przez DariuszH Gaduła (3,100 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...