Autor Zpráva
Charlie
Profil
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
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('"','&quot',$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
http://4a.php5.cz/karel-js.xhtml

works perfectly
halogan
Profil
Za použití externího souboru:

window.onload = trDel;


function trDel() {
rows = document.getElementsByTagName("tr") // načtení trček
alert(rows.length); // test, jesli to načetlo všechny řádky
for (i = 0; i < rows.length; i++) { // ted uz jen <, &lt; měl kecy zas tady
if (rows[i].getAttribute("rel") == "skryj_me") { // snad jasný
rows[i].style.display="none";
}
}
}


A načtení:
<script type="text/javascript" src="./karel.js"></script>

Charlie
Profil
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
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
Fred: dělá javascriptem, aby lidé s JS vyplým viděli celou tabulku.
Fred
Profil
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
Tohle background:red;width:20px;height:20px je tam proto abych viděl jestli to proběhlo.
habendorf
Profil
Nešlo by teda jen if (!cols[i].firstChild.nodeValue) ?
Fred
Profil
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
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
Mohlo by ti pomoci llookovo elegantní řešení innerText pomocí DOM .
Fred
Profil
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.
Toto téma je uzamčeno. Odpověď nelze zaslat.