ZellenSPALTEN verändern!?

RedPartisan

Grünschnabel
Guten Nachmittag!

Hätte da eine andere Frage:

Kann man verschieden <td>s mit Namen (also getElementsByName) so zusammenfassen, dass ein onMouseOver auf eines dieser Felder bewirkt, dass die ganze Gruppe die Farbe wechselt...

also ähnlich wie:

<tr onMouseOver="this.style.backgroundColor='#farbe'">, nur halt sagen wir mal auf eine Tabellenspalte angewandt, nicht auf eine Tabellenzeile...

Was meint ihr?

MfG,
Reddie
 
Zuletzt bearbeitet:
Über "document.getElementsByName" geht das nicht, weil Tabellenzellen lt. HTML kein "name"-Attribut besitzen.
je nach Brauser kann es daher passieren, dass er dir keinen Namen zurückgibt, auch wenn die Zelle einen besitzt.

Du kannst Gruppen von Zellen bilden, indem du ihnen gleiche IDs verpasst... ist zwar auch nicht ganz koscher, weil IDs eigentlich nur einmal vergeben werden dürfen, ...aber damit verärgerst du nur das w3c:)

Dann gehst du alle Zellen durch, ....welche eine ID besitzen, werden zu einer Gruppe zugeordnet und als Objekt in einen Array gespeichert... fertig.

das Skript könnte dann so aussehen....

Code:
<script type="text/javascript">
<!--
//Farben...(normal,markiert)
arrColors=new Array('white','red');

arrGroups=new Array();
function init_events()
{
tbl=document.getElementById('myTable');
for(var r=0;r<tbl.rows.length;++r)
    {
    for(var c=0;c<tbl.rows[r].cells.length;++c)
        {
        if(!tbl.rows[r].cells[ c].id){continue;}
        if(!arrGroups[tbl.rows[r].cells[ c].id]){arrGroups[tbl.rows[r].cells[ c].id]=new Array();}
        arrGroups[tbl.rows[r].cells[ c].id].push(tbl.rows[r].cells[ c]);
        tbl.rows[r].cells[ c].onmouseover=new Function('F','highlight(this,1)');
        tbl.rows[r].cells[ c].onmouseout=new Function('F','highlight(this,0)');
        }
    }
}
function highlight(o,e)
{
for(c=0;c<arrGroups[o.id].length;++c)
    {
    arrGroups[o.id][ c].style.backgroundColor=arrColors[e];
    }
}
if(document.getElementById)
    {
    window.onload=init_events;
    }
//-->
</script>

... du musst der betreffenden Tabelle die ID "myTable" verpassen(das kennst du ja schon:)) ..und den Zellen die IDs deiner Wahl.

Damits nicht wieder heisst, es funktioniert nicht.....so funktionierst

Wenn du das nur bei Spalten machen willst, gehts noch einfacher(vorrausgesetzt, alle <tr> enthalten die gleiche Anzahl Zellen)...:
Code:
<script type="text/javascript">
<!--
//Farben...(normal,markiert)
arrColors=new Array('white','red');

arrCols=new Array();
function init_events()
{
tbl=document.getElementById('myTable');
for(var r=0;r<tbl.rows.length;++r)
    {

    for(var c=0;c<tbl.rows[r].cells.length;++c)
        {
        if(!arrCols[ c]){arrCols[ c]=new Array();}
        arrCols[ c].push(tbl.rows[r].cells[ c]);
        tbl.rows[r].cells[ c].onmouseover=new Function('F','highlight('+c+',1)');
        tbl.rows[r].cells[ c].onmouseout=new Function('F','highlight('+c+',0)');
        }
    }
}
function highlight(n,e)
{
for(c=0;c<arrCols[n].length;++c)
    {
    arrCols[n][ c].style.backgroundColor=arrColors[e];
    }
}
if(document.getElementById)
    {
    window.onload=init_events;
    }
//-->
</script>

Da nur wieder der Tabelle die ID verpassen.... der Rest läuft von selbst, die Zellen benötigen keine IDs.
Auch hier ein Testlauf.
 
Zuletzt bearbeitet:
mhm... danke!

habs aber noch nicht verwendet, weils in der praxis doch nicht so gut aussieht...
blöd ist es vor allem (2.variante) wenn eines der darüberliegenden felder einen colspan besitzt!

hm... aber wo lernt man auf diese weise javascript zu programmieren?
würd mich nämlich stark dafür interessieren und hab auch schon diverse dinge programmiert damit, aber ich brauch mal einen stärkeren bezug dazu...
 
Original geschrieben von RedPartisan
blöd ist es vor allem (2.variante) wenn eines der darüberliegenden felder einen colspan besitzt!

:)Wer lesen kann, ist hier klar im Vorteil:

Wenn du das nur bei Spalten machen willst, gehts noch einfacher(vorrausgesetzt, alle <tr> enthalten die gleiche Anzahl Zellen)...:
 

Neue Beiträge

Zurück