Autor | Zpráva | ||
---|---|---|---|
Charlie Profil |
#1 · Zasláno: 31. 3. 2005, 18:16:42 · Upravil/a: Charlie
Zdravím všechny,
mám tabulku podobné této: <table id="tabulka"> <tr><td>První řádek</td></tr> <tr><td>Druhý řádek</td></tr> <tr rel="skryj_me"><td>Třetí řádek</td></tr> </table> A potřebuji docílit toho, aby se řádek s relem "skryj_me" po načtení stránky skryl. Javascript vypadá asi takhle: window.onload = skryjRadky(); function skryjRadky() { rows = document.getElementsByTagName('tr'); for (i = 0; i < rows.length; i++) { if (rows[i].getAttribute('rel') == 'skryj_me') { rows[i].style.display='none'; } } } V IE mi to vyhazuje chyby. Díky za radu |
||
Charlie Profil |
#2 · Zasláno: 31. 3. 2005, 18:29:57
A taky bych měl návrh na vylepšení tohohle fóra:
Jak sami vidíte, ve jménu vlákna chybí na konci uvozovky. Doporučuji tento problém jednoduše vyřešit v PHP, stačí před vložením vlákna do databáze napsat: $jmeno_vlakna = str_replace('"','"',$jmeno_vlakna); Pokud to moderátoři vezmou v úvahu, hned bude fórum hezčí. Taky to pošlu jako bug autorům miniBB :-) |
||
halogan Profil |
#3 · Zasláno: 31. 3. 2005, 18:49:26
|
||
halogan Profil |
#4 · Zasláno: 31. 3. 2005, 18:57:12 · Upravil/a: halogan
Za použití externího souboru:
window.onload = trDel; A načtení: <script type="text/javascript" src="./karel.js"></script> |
||
Charlie Profil |
#5 · Zasláno: 31. 3. 2005, 19:18:22
Problém jsme vyřešili, díky haloganovi.
Teď jsem objevil ještě jeden. Co IEčku vadí na týhle funkci? function addAnswer(taskId,answerId) { var to; var from; var i; to = answerId +1; from = answerId - 5; for (i=from;i<to;i++) { if (document.getElementById('answer_row['+taskId+']['+i+']').style.displa y == 'none') { alert(document.getElementById('answer_row['+taskId+']['+i+']').style.d isplay); document.getElementById('answer_row['+taskId+']['+i+']').style.display ='table-row'; document.getElementById('answer['+i+'][0]').setAttribute('checked','ch ecked'); document.getElementById('answer['+i+'][1]').focus(); i = to; } } } Díky |
||
Fred Profil |
#6 · Zasláno: 31. 3. 2005, 19:29:42
Charlie
Promiň, je sice pravda, že tohle funguje, ale nějak nechápu, k čemu to má sloužit. Protože nechápu, proč když tam už musíš kvůli tomu scriptu doplňvat atribut rel, proč tam nedoplníš class se stylem display none, a pokud bude mít řádek tabulky víc buňek tal ho tohle skryje celý. Takže je otázka, proč neskryváš prázdnou buňku rovnou classem a proč to děláš javascriptem. Eventuelně, proč, nebo podle jakého příznaku tam ten rel dodáváš. K tý druhý funkci tam zase nechápu, proč (jestli tedy souvisí s předchozím dotazem) , tam dáváš podmínku if (document.getElementById('answer_row['+taskId+']['+i+']').style.displa y == 'none') a nepoužiješ tady znovu ten rel, když už ho tam máš if (document.getElementById('answer_row..getAttribute("rel") == "skryj_me") |
||
halogan Profil |
#7 · Zasláno: 31. 3. 2005, 19:48:11
Fred: dělá javascriptem, aby lidé s JS vyplým viděli celou tabulku.
|
||
Fred Profil |
#8 · Zasláno: 31. 3. 2005, 20:00:14
No ptám se protože když už tamjde dostat ten rel bez js, tak možná není js potřeba. Kdyby tam ten rel nešel dostat dělal bych to asi takhle, jestli tedy dotaz co je v titulku platí, tzn. Skrytí prázdných řádek tabulky
<script type="text/javascript"> function trDel() { cols = document.getElementsByTagName("td") for (i = 0; i < cols.length; i++) { if (cols[i].firstChild.nodeValue==' ') { // pokud je prázdná cols[i].parentNode.style.display='none' //skryje rodiče td, tzn tr }}} window.onload = trDel; </script> <table> <tr><td>První řádek</td></tr> <tr><td>Druhý řádek</td></tr> <tr><td style="background:red;width:20px;height:20px;"> </td></tr> </table> jen se mi nějak nedaří získat prázdnou buňku, když tam není mezera mezi <td> a </td> hodí to chybu, nevím jak se zjišťuje správně že tam nic není. |
||
Fred Profil |
#9 · Zasláno: 31. 3. 2005, 20:02:03
Tohle background:red;width:20px;height:20px je tam proto abych viděl jestli to proběhlo.
|
||
habendorf Profil |
#10 · Zasláno: 31. 3. 2005, 20:02:57
Nešlo by teda jen if (!cols[i].firstChild.nodeValue) ?
|
||
Fred Profil |
#11 · Zasláno: 31. 3. 2005, 20:13:40 · Upravil/a: Fred
To jsem zkoušel a nejde to, hází to chybu, ale když dám
if (cols[i].firstChild.nodeValue =='x') a do toho <td>x</td> normálně jí to skryje |
||
Fred Profil |
#12 · Zasláno: 31. 3. 2005, 20:16:52
BTW již delší dobu se pokouším najít nějaký slušný zdroj na náhradu innerHTML pomocí DOM, tohle je zrovna ten případ, co se o tom nedá nikde nic pořádně najít. Zjištění hodnoty obsahu, když si tam dám innerHTML funguje to bez problémů, akorát to není validní DOM.
<script type="text/javascript"> function trDel() { cols = document.getElementsByTagName("td") for (i = 0; i < cols.length; i++) { if (cols[i].innerHTML.length ==0) { // prázdná cols[i].parentNode.style.display='none' }}} window.onload = trDel; </script> </head> <body> <table> <tr><td>První řádek</td></tr> <tr><td>Druhý řádek</td></tr> <tr><td style="background:red;width:20px;height:20px;"></td></tr> </table> |
||
habendorf Profil |
#13 · Zasláno: 31. 3. 2005, 20:41:18
Mohlo by ti pomoci llookovo elegantní řešení innerText pomocí DOM .
|
||
Fred Profil |
#14 · Zasláno: 31. 3. 2005, 20:47:01
habendorf Díky to vypadá dobře (node.hasChildNodes()) , ale už jsme možná trochu OT, valím na pivo a zítra na to mrknu.
|
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0