Avatar billede horsmark Nybegynder
20. september 2001 - 17:21 Der er 17 kommentarer og
3 løsninger

Ændre i Attribut for <td>

Jeg har...
<td id=\"januar\" class=\"monthheader\" status=\"closed\">

..og kan selvfølgeligt kalde den med...
document.getElementById(\'januar\').getAttribute(\"status\")

Mit spørgsmål er så hvordan ændrer jeg status i <td>´en til \'opened\'?
Avatar billede nute Nybegynder
20. september 2001 - 17:26 #1
hmmm....\'status\' er da ikke en HTML attributt...hva skal den kunne gjøre?
Avatar billede horsmark Nybegynder
20. september 2001 - 17:32 #2
jojo jeg kobler selv en attribut på <td>´en og kan jo så fra getAttribute(\"status\") hente attributten..

Avatar billede nute Nybegynder
20. september 2001 - 17:38 #3
hmmm...dette er noe høyst IE spesifikt...men hvis man kikker i dokumentasjonen, så vil man jo finne metoden setAttribute()

http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/setAttribute.asp?frame=true

/nute
Avatar billede jakoba Nybegynder
20. september 2001 - 17:41 #4
Det nemmeste er blot at oprerret din status som en lokal variabel i <td> objektet.

document.getElementById(\'januar\').status = 1234;  opretter status og giver den en værdi

du kan så skrive den som normalt:

alert( \"status for januar er: \"+ document.getElementById(\'januar\').status )

men check lige om td\'er måske har en status variabel i forvejen. hvis de har må du kalde den noget andet, fx  minstatus.

mvh JakobA

Avatar billede olebole Juniormester
20. september 2001 - 18:33 #5
<ole>
nute >> Du har både \'getAttribute()\' og \'setAttribute()\' til rådighed.
Metoden, som jakoba anviser, er derimod ikke IE-specifik, men funker fint i NS6+. Du må gerne sætte \'private\' properties på dine tags, som din dynamiske front-end kan bruge til alt muligt  ;o)
/mvh
</bole>
Avatar billede horsmark Nybegynder
20. september 2001 - 22:22 #6
Oki hvad fanden gør jeg galt her. Jeg vil gerne have en mulighed for at folde ind igen UDEN at det påvirker dem der allerede ER udfoldet... ?

<html>
<head>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3.5\">
<style type=\"text/css\">
.monthheader    {cursor:hand;}
.januar     {display:none;}
.februar    {display:none;}
</style>

<script language=\"JavaScript\">
var iSheets = document.styleSheets.length;
function skift(month, ClassID) {
  var iRules = document.styleSheets[iSheets-1].rules.length;
  if (document.getElementById(month).getAttribute(\"status\")==\"closed\"){
    document.styleSheets[iSheets-1].addRule(\'.\' + month, \"display:block\");
    document.getElementById(month).setAttribute(\"status\",\"opened\");
  }
  else if (1 < iRules && document.getElementById(month).getAttribute(\"status\")==\"opened\"){
    document.styleSheets[iSheets-1].removeRule(iRules-1);
  }
}
</script>
</head>
<body>

<table cellspacing=\"0\" cellpadding=\"0\" border=\"1\">
<!-- Januar ClassID 1 -->
<tr><td id=\"januar\" class=\"monthheader\" status=\"closed\" onclick=\"skift(\'januar\', 1);\">X</td><td>januar</td><td>blaaa</td></tr>
  <tr class=\"januar\"><td></td><td>linie 1</td></tr>
  <tr class=\"januar\"><td></td><td>linie 2</td></tr>
  <tr class=\"januar\"><td></td><td>linie 3</td></tr>
<!-- Februar, ClassID 2 -->   
<tr><td id=\"februar\" class=\"monthheader\"  status=\"closed\" onclick=\"skift(\'februar\', 2);\">X</td><td>Februar</td><td>blabla</td></tr>
  <tr class=\"februar\"><td></td><td>oasdf 1</td></tr>
  <tr class=\"februar\"><td></td><td>oktsdfober 2</td></tr>
  <tr class=\"februar\"><td></td><td>oktadsfober 3</td></tr>
</table>
</body>
</html>

og husk på jeg gør mit bedste men er altså mest endnu til asp *hulk*
Avatar billede horsmark Nybegynder
20. september 2001 - 22:26 #7
hurra fandt selv fejlen glemte lige at resette status ved removerule.. *SSS*

function skift(month, ClassID) {
  var iRules = document.styleSheets[iSheets-1].rules.length;
  if (document.getElementById(month).getAttribute(\"status\")==\"closed\"){
    document.styleSheets[iSheets-1].addRule(\'.\' + month, \"display:block\");
    document.getElementById(month).setAttribute(\"status\",\"opened\");
  }
  else if (1 < iRules && document.getElementById(month).getAttribute(\"status\")==\"opened\"){
    document.styleSheets[iSheets-1].removeRule(iRules-1);
    document.getElementById(month).setAttribute(\"status\",\"closed\");
  }
}
</script>


Avatar billede horsmark Nybegynder
20. september 2001 - 22:31 #8
Horsmark>>> tak for ét sølle point, hvordan syns du selv det går efter al den tid jeg har lagt i dette for dig. Hvis du bliver ved med at smide om dig med points så har jeg sq ikke råde til at give flere væk til OverKoder Ole ??

<mvh>HorsMark Nr.2</mvh>

(hmmm jeg skal vidst snart sove?)
Avatar billede jakoba Nybegynder
20. september 2001 - 23:13 #9
tak for points.
Ja søvn kan være ret nyttigt :-))
Avatar billede horsmark Nybegynder
20. september 2001 - 23:16 #10
for resten jakoba - jeg er ved at være ret træt af ovenstående problemstilling. Prøv lige at kopiere det hele og test det...

det sjove er at fold uf og ind virker de første par gange MEN så bytter den om på tingene??? HUH

Du skal nok få points
Avatar billede jakoba Nybegynder
20. september 2001 - 23:51 #11
de der funktioner  getAttribute()  og  setAttribute()  er vist først kommet til i IE5 eller senere, min IE4 vil ikke kendes ved dem.

sorry.

mvh JakobA
Avatar billede olebole Juniormester
21. september 2001 - 04:28 #12
Prøv denne. Den sætter også selv bredden på tabellen efter bredden på den breddeste tabelrække - selvom rækken er skjult med \'display:none\':

<html>
<head>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3.5\">
<style type=\"text/css\">
.monthheader {
    width:12px;
    cursor:hand;
}
.sub {
    display:none;
}
</style>

<script language=\"JavaScript\">
var subTrArr;
function skift(td) {
    active = false;
    targetTr = document.getElementById(td.id+\"_sub\");
    if (targetTr.style.display==\"block\") active = true;
    for (i=0; i<subTrArr.length; i++) {
        if (subTrArr[i].className==\"sub\") {
                subTrArr[i].style.display = \"none\";
        }
    }
    if (!active) {
        targetTr.style.display = \"block\";
    }
}
function setWidth() {
    maxW = 0;
    tbl = document.getElementById(\"gudrun\");
    subTrArr = tbl.getElementsByTagName(\"TR\");
    testDiv = document.getElementById(\"ib\");
    for (i=0; i<subTrArr.length; i++) {
            testDiv.innerHTML = subTrArr[i].innerHTML;
            divW = testDiv.offsetWidth;
            maxW = (divW>maxW)? divW : maxW;
    }
    tbl.style.width = maxW + 10;
}
</script>

</head>
<body onload=\"setWidth();\">
<div id=\"ib\" style=\"visibility:hidden;width:10px;white-space : nowrap;\"></div>
<table id=\"gudrun\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\" onselectStart=\"return false;\">
<!-- Januar ClassID 1 -->
<tr>
    <td>
    <table style=\"width:100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
    <tr><td id=\"januar\" class=\"monthheader\" onclick=\"skift(this);\">X</td><td>januar</td><td>blaaa</td></tr>
    </table>
    </td>
</tr>
<tr id=\"januar_sub\" class=\"sub\">
    <td>
    <table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" style=\"width:100%\">
        <tr><td>-</td><td>linie 1</td></tr>
          <tr><td>-</td><td>linie 2</td></tr>
          <tr><td>-</td><td>linie 3</td></tr>
    </table>
    </td>
</tr>
<!-- Februar, ClassID 2 -->   
<tr>
    <td>
    <table style=\"width:100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
    <td id=\"februar\" class=\"monthheader\" onclick=\"skift(this);\">X</td><td>Februar</td><td>blabla</td></tr>
    </table>
    </td>
</tr>
<tr id=\"februar_sub\" class=\"sub\">
    <td>
    <table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" style=\"width:100%\">
        <tr><td>-</td><td>linie 1</td></tr>
          <tr><td>-</td><td>linghie 2</td></tr>
          <tr><td>-</td><td>lingzghzghbxfhgg</td></tr>
    </table>
    </td>
</tr>

</table>
</body>
</html>

/mvh
Avatar billede horsmark Nybegynder
21. september 2001 - 08:24 #13
I dribler... og jeg er træt af at være tilbage MEN jeg skal nok indhente jer... pludseligt en dag bliver i overhalet af en mig der kommer spænende igennem jeres ben med mit grå hår... og med forhåbentlig LANGT mere javascriptkendskab! *S*

hold da kaje jeg må være en pain MEN det skal kunne lade sige gøre (som det oprindelige script tildels :-| ) at kunne have flere åbne på engang. Også derfor jeg videresendte 2 parametre (month, ClassID) for at tjeck hvilken der skulle folde ind igen.

Kan det ikke indsættes med et knipseslag, for så spiller scriptet efter hensigten. Eftersom det er intranetudvikling så kører vi kun på IE platform, så skidt pyt med crossbrowserkombilitet.

<mvh>Onkel HorsMark</mvh>

Håber ikke jeg går jer på OG ja som stor tak vil jeg rundhåndet smide flere points afsted. :-)
Avatar billede horsmark Nybegynder
21. september 2001 - 08:26 #14
PS. width funktionen er god men jeg kører med faste bredder og styrer dette fra asp´en (ergo hvilke linier der skal klippes)
Avatar billede olebole Juniormester
21. september 2001 - 12:58 #15
Jo, horsmark...det kan man jo godt, men denne her lukker jo alle og åbner lige derefter sin egen sin egen...med mindre den selv stod åben.
Det rick med at ændre dynamisk på style-sheet\'ed er absolut mulig, men er temmelig performance-sænkende, da det er en tung process. Det er meget hurtigere at bladre rækkerne igennem.
Hvis du insisterer, laver jeg det gerne om. Foreløbig har jeg lavet dette script, uden bredde-delen:

<script language=\"JavaScript\">
function skift(td) {
    active = false;
    tbl = document.getElementById(\"gudrun\");
    subTrArr = tbl.getElementsByTagName(\"TR\");
    targetTr = document.getElementById(td.id+\"_sub\");
    if (targetTr.style.display==\"block\") active = true;
    for (i=0; i<subTrArr.length; i++) {
        if (subTrArr[i].className==\"sub\") {
                subTrArr[i].style.display = \"none\";
        }
    }
    if (!active) {
        targetTr.style.display = \"block\";
    }
}
</script>

/mvh
Avatar billede horsmark Nybegynder
21. september 2001 - 13:14 #16
100 points mere og jeg insisterer :-)

Ps. har du dit eget firma?
Avatar billede olebole Juniormester
21. september 2001 - 13:17 #17
Denne her lukker den, der i forvejen er åben, hvis du sender et \'et-tal\' med i kaldet:

<script language=\"JavaScript\">
var active = false;
function skift(td, doClose) {
    if (doClose && active) {
        active.style.display = \"none\";
        active = false;
    }
    targetTr = document.getElementById(td.id+\"_sub\");
    targetTr.style.display = \"block\";
    active = targetTr;
}
</script>

og kaldet:
  onclick=\"skift(this,1);\"
lukker den aktive. Det gør denne ikke:
  onclick=\"skift(this);\"

Kan du bruge det, eller er det noget andet, du vil?
OG: du kan lige prøve at smide flere points efter mig! Du *har* allerede været rundhåndet nok  :)
/mvh
Avatar billede olebole Juniormester
21. september 2001 - 13:18 #18
Nej, jeg har været interface developer hos Framfab i et lille år og er lige skiftet til et firma, der hedder inleadMedia. Derudover har jeg freelancet en del  :)
Avatar billede horsmark Nybegynder
21. september 2001 - 13:22 #19
oki dette lyder måske sjovt (underligt) men jeg leder efter privatundervisning i JavaScript (og programmering generelt). Jeg har været på flere kurser omkring bla. SQL osv. MEN det er altid pisseirriterende hvis niveauet enten er alt for lavt eller alt for højt.

Er det noget du freelancer i, undervisning altså ?
Avatar billede olebole Juniormester
21. september 2001 - 14:26 #20
Hmmmmm...måske en lang snak:
ole@inleadmedia.dk  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester