06. september 2005 - 21:32Der er
30 kommentarer og 1 løsning
Skjule rækker ud fra classname
Jeg vil gerne have lavet en javascript-funktion der kan skjule og vise rækker (<tr>) ud fra dens classname.
Jeg har 4 funktioner til dette (tak barklund), men jeg kan stadig ikke helt få det til at virke (Jeg kalder det vha onclick="RowVisibility(this.id);":
function RowVisibility(id) { var oElement = getElementsByClassName(document, id); var aOldClasses = oElement.className.split(\" \"); var ClassIsHidden = false; for (i = 0; i < aOldClasses.length; i++) { if(aOldClasses[i] == 'hidden') { ClassIsHidden = true; } }
function getElementsByClassName(node, classname) { var a = []; var re = new RegExp('\\\\b' + classname + '\\\\b'); var els = node.getElementsByTagName(\"*\"); for(var i=0,j=els.length; i<j; i++) if(re.test(els[i].className))a.push(els[i]); return a; }
// Tilføj en klasse til et element. Hvis den allerede findes tilføjes den ikke. function addClass(oElement, sAddClassName) { var aOldClasses = oElement.className.split(\" \"); var aNewClasses = new Array(); var bClassAlreadyExists = false; for (i = 0; i < aOldClasses.length; i++) { if (aOldClasses[i] == sAddClassName) { bClassAlreadyExists = true; } else { aNewClasses[aNewClasses.length] = aOldClasses[i]; } } if (! bClassAlreadyExists) { aNewClasses[aNewClasses.length] = sAddClassName; oElement.className = aNewClasses.join(\" \"); } }
// Fjern en klasse fra et element. function removeClass(oElement, sRemoveClassName) { var aOldClasses = oElement.className.split(\" \"); var aNewClasses = new Array(); for (i = 0; i < aOldClasses.length; i++) { if (aOldClasses[i] != sRemoveClassName) { aNewClasses[aNewClasses.length] = aOldClasses[i]; } } oElement.className = aNewClasses.join(\" \"); }
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Slettet bruger
06. september 2005 - 21:32#1
- det hele er escaped, da det er skrevet i en php-variabel.
Synes godt om
Slettet bruger
06. september 2005 - 21:36#2
Og jeg får fejlen, at oElement ikke har nogle properties. (var aOldClasses = oElement.className.split(" ");)
Er det ikke fordi getElementsByClassName returnerer et array og du forsøger at checke className på arrayet, hvor du vel gerne vil checke det på hvert enkelt element...?
Nu får jeg ingen fejl, men der er heller ingen rækker der bliver skjult: function RowVisibility(id) { var oElement = getElementsByClassName(document, id); var aOldClasses = oElement; var ClassIsHidden = false; for (i = 0; i < aOldClasses.length; i++) { if(aOldClasses[i] == 'hidden') { ClassIsHidden = true; } }
function getElementsByClassName(node, classname) { var a = []; var re = new RegExp('\\\\b' + classname + '\\\\b'); var els = node.getElementsByTagName(\"*\"); for(var i=0,j=els.length; i<j; i++) if(re.test(els[i].className))a.push(els[i]); return a; }
// Tilføj en klasse til et element. Hvis den allerede findes tilføjes den ikke. function addClass(oElement, sAddClassName) { var aOldClasses = oElement; var aNewClasses = new Array(); var bClassAlreadyExists = false; for (i = 0; i < aOldClasses.length; i++) { if (aOldClasses[i] == sAddClassName) { bClassAlreadyExists = true; } else { aNewClasses[aNewClasses.length] = aOldClasses[i]; } } if (! bClassAlreadyExists) { aNewClasses[aNewClasses.length] = sAddClassName; oElement.className = aNewClasses.join(\" \"); } }
// Fjern en klasse fra et element. function removeClass(oElement, sRemoveClassName) { var aOldClasses = oElement; var aNewClasses = new Array(); for (i = 0; i < aOldClasses.length; i++) { if (aOldClasses[i] != sRemoveClassName) { aNewClasses[aNewClasses.length] = aOldClasses[i]; } } oElement.className = aNewClasses.join(\" \"); }
Synes godt om
Slettet bruger
07. september 2005 - 09:43#6
Jeg er rimelig sikker på, at det er fordi jeg har flere elementer med samme classname, og jeg kan ikke helt finde ud af, hvordan jeg skal sætte (eller fjerne) klassen "hidden" fra dem.
Min egen teori var, at den regular expression der benyttes i getElementsByClassName ikke fungerede, en jeg kan som sagt ikke regexp, så jeg vil ikke begynde at foreslå noget så vovet... :)
Tjah, den er i hvertfald forvirrende, når der skal dobbelt-dobbelt escapes på special-tegn, men den skulle være god nok, idet den tester om det angivne classname er et helt ord i class-attributten !-)
Synes godt om
Slettet bruger
07. september 2005 - 12:31#15
Det virker med at fjerne "hidden" fra klassen, men den kan ikke tilføje det igen.. :o)
Synes godt om
Slettet bruger
07. september 2005 - 12:35#16
Hvis jeg sætter "standard" til at være "hidden", kan den godt vises ved klik på knappen, og hvis jeg sætter standard til "ikke hidden" (lader være med at skrive et sekundært classname), kan jeg også skjule den.
Men så snart jeg har trykket én gang på knappen, og den første handling er sket, sker der ikke mere ved gentagne tryk på knappen.
Iøvrigt er det ikke tilladt at have id'er, som starter med tal, så brug som generel retningslinje, at du ikke bruger identifikatorer, som starter på den måde (og lad det gælde _alle_ identifikatorer, altså også navne, klasser m.m. !-)
Synes godt om
Slettet bruger
07. september 2005 - 13:04#24
... Du er min helt :D
Synes godt om
Slettet bruger
07. september 2005 - 13:04#25
Hvis i begge smider et svar, så får du 100 point roenving, og softspot du får 50 for din tid :o)
Din tanke er smuk, wicez, men da jeg ikke bidrog i særlig grad til løsningen, synes jeg du skal beholde dine point - måske du kan give mig dem for noget rigtig hjælp på et senere tidspunkt - men tak for budet :)
Synes godt om
Slettet bruger
07. september 2005 - 13:12#29
Du skal nok få pointene en anden gang så, men jeg ville med glæde give dig pointene en anden gang :o)
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.