Avatar billede ieconfig Nybegynder
02. marts 2006 - 20:02 Der er 4 kommentarer og
1 løsning

gennemløb af tabel - skiftende farver

Hej Eksperter.

Jeg bruger følgende javascript til at løbe en tabel igennem og farve den skiftende.

Desværre virker den kun på en tabel, er der nogen der kan lurer hvordan jeg får den til at løbe flere tabeller igennem og farve dem.

<script>
  // this function is needed to work around
  // a bug in IE related to element attributes
  function hasClass(obj) {
    var result = false;
    if (obj.getAttributeNode("class") != null) {
        result = obj.getAttributeNode("class").value;
    }
    return result;
  } 

function stripe(id) {

    // the flag we'll use to keep track of
    // whether the current row is odd or even
    var even = false;
 
    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColor = arguments[1] ? arguments[1] : "#fff";
    var oddColor = arguments[2] ? arguments[2] : "#eee";
 
    // obtain a reference to the desired table
    // if no such table exists, abort
    var table = document.getElementById(id);
    if (! table) { return; }
   
    // by definition, tables can have more than one tbody
    // element, so we'll have to get the list of child
    // &lt;tbody&gt;s
    var tbodies = table.getElementsByTagName("tbody");

    // and iterate through them...
    for (var h = 0; h < tbodies.length; h++) {
   
    // find all the &lt;tr&gt; elements...
      var trs = tbodies[h].getElementsByTagName("tr");
     
      // ... and iterate through them
      for (var i = 0; i < trs.length; i++) {

        // avoid rows that have a class attribute
        // or backgroundColor style
        if (! hasClass(trs[i]) &&
            ! trs[i].style.backgroundColor) {
         
          // get all the cells in this row...
          var tds = trs[i].getElementsByTagName("td");
       
          // and iterate through them...
          for (var j = 0; j < tds.length; j++) {
       
            var mytd = tds[j];

            // avoid cells that have a class attribute
            // or backgroundColor style
            if (! hasClass(mytd) &&
                ! mytd.style.backgroundColor) {
       
              mytd.style.backgroundColor =
                even ? evenColor : oddColor;
           
            }
          }
        }
        // flip from odd to even, or vice-versa
        even =  ! even;
      }
    }
  }
</script>

kode:
<body onload="stripe('produkter', '#fff', '#F5F5F5');">
<table id="stripe">
<tr><td></td></tr>
<tr><td></td></tr>
</table>

ovenstående virker perfekt.

men hvis jeg har følgende kode:
<table id="stripe">
<tr><td></td></tr>
<tr><td></td></tr>
</table>

<table id="stripe">
<tr><td></td></tr>
<tr><td></td></tr>
</table>

- så løber den kun første tabel igennem :/

På forhånd tak.
Avatar billede mclemens Nybegynder
02. marts 2006 - 22:16 #1
i toppen i javascript indsæt funktion som denne:
function mcrun(){
stripe('produkter', '#fff', '#F5F5F5')
stripe('produkter2', '#fff', '#F5F5F5')
}


<body onload="mcrun()">
<table id="produkter">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>

<table id="produkter2">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>
Avatar billede ieconfig Nybegynder
02. marts 2006 - 23:15 #2
Problemet er bare at tabellerne bliver genereret dynamisk, så jeg kan ikke kalde give dem forskellige id's :| ellers havde den metode virket. Tak
Avatar billede mclemens Nybegynder
03. marts 2006 - 10:18 #3
Vi prøver lige igen... hvad med denne her?
Ved over 100 "stripe" tabeller på samme side skal du øge atab.


f1 og f2 kan også kaldes via. body'en...
- I dette tilfælde så erstat øverste del med:
<script language="javascript">
function striber(f1,f2) {

og body med:
<body onload="striber('#fff','#f5f5f5');">



<script language="javascript">
function striber() {
f1="#fff";
f2="#f5f5f5";

atab=100;fvalg=1;for(mc=0;mc<atab;mc++){
if(!document.getElementById("stripe"))mc=atab;else{
table=document.getElementById("stripe");
tabody=table.getElementsByTagName("tbody");
for(h=0;h<tabody.length;h++){ 
trs=tabody[h].getElementsByTagName("tr");
for(i=0;i<trs.length;i++){
tds=trs[i].getElementsByTagName("td");
for(j=0;j<tds.length;j++){tdnu=tds[j];
if(fvalg==1){tdnu.style.backgroundColor=f1;
fvalg=2;}else if(fvalg==2){tdnu.style.backgroundColor=f2;
fvalg=1;}}}}document.getElementById("stripe").id="ok";}}}
</script>

<body onload="striber();">

<table Id="stripe">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>

<table Id="stripe">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>

<table Id="stripe">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>

<table Id="stripe">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>

<table Id="stripe">
<tr><td>a</td></tr>
<tr><td>b</td></tr>
</table>



.... Hvis du vil bruge det oprindelige script så:

erstat: <body onload="stripe('produkter', '#fff', '#F5F5F5');">
med: <body onload="stripe('stripe', '#fff', '#F5F5F5');">


erstat: }</script>
med: document.getElementById("stripe").id="ok";}}}</script>


indsæt under:var oddColor = arguments[2] ? arguments[2] : "#eee";
...disse to linjer:
atab=100;fvalg=1;for(mc=0;mc<atab;mc++){
if(!document.getElementById("stripe"))mc=atab;else{
Avatar billede ieconfig Nybegynder
03. marts 2006 - 10:31 #4
super don clemense ;-)
smid et svar og mange tak for hjælpen.
Avatar billede mclemens Nybegynder
03. marts 2006 - 10:43 #5
svar ;)
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