[js + dom] Hoe de rowindex te vinden?

Pagina: 1
Acties:

  • DPLuS
  • Registratie: April 2000
  • Niet online
Ik heb een table met een aantal rows en in iedere row een cel.
in iedere cel staat ook zo'n linkje:

HTML:
1
<a href="javascript:void(0)" name="remove_MM007" onClick="removeMM007(this)">verwijder</a>


Nu wil ik in de functie removeMM007 de huide table row verwijderen.
Daar gebruik ik deze functie voor:

JavaScript:
1
2
3
4
5
6
function removeMM007(obj) {

    var oTable = document.getElementById('MM007_table');
    oTable.deleteRow(obj.parentNode.parentNode.parentNode.rowIndex);

}


Maar nu vind ik zelf die parentNode niet de beste oplossing.
Want stel dat ik die <a>-link de volgende keer weer in nog een andere container gooi, moet ik in dit script nog een .parentNode toevoegen, want anders krijg ik niet de rowIndex terug (omdat ik dan op een ander object gestoten ben).
Om de functie zo generiek mogelijk te maken wil ik af van die parentNode.
Ik zat zelf al hieraan te denken:

while (oElement.tagName != "TR")
{
oElement = oElement.previousSibling;
}

Maar dat vind ik eigenlijk ook ranzig.
Heeft iemand een beter idee?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

offtopic:
Eigenlijk zou je de parameter oObj moeten noemen O-)
Maar dat vind ik eigenlijk ook ranzig.
Vind ik niet. Dat is nou typisch iets waar je dom heel goed voor kunt gebruiken: zoeken in de dom-tree. Je moet dan alleen wel eerst op een soortgelijke manier de eerste parent TR opzoeken.

code:
1
2
3
4
5
6
7
8
9
10
function findFirstAncestorNode ( ptr, type ) {
   while ( ptr && ptr.nodeName != type ) {
      ptr = ptr.parentNode;
   }
   return ptr;
}

function removeRow ( obj ) {
   var tr = findFirstAncestorNode ( obj, "tr" );
}
Iets van dien aard.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Of je past dat parentNode.parentNode.pa..etc.. aan met een loopje die omhoog gaat totdat er een TR-element is gevonden?

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 05-05 14:01

thomaske

» » » » » »

Verwijderd schreef op donderdag 28 juli 2005 @ 21:19:
Of je past dat parentNode.parentNode.pa..etc.. aan met een loopje die omhoog gaat totdat er een TR-element is gevonden?
Dat is exact wat de functie findFirstAncestorNode() van drm doet.. :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

ik zou er trouwens een case-insensitive check van maken; in HTML worden tagName's in uppercase teruggegeven en in XHTML in lowercase:
JavaScript:
1
2
3
4
5
6
7
8
9
function findFirstAncestorNode(el, tagname)
{
    tagname = tagname.toLowerCase();

    while (el && el.tagName.toLowerCase() != tagname)
        el = el.parentNode;

    return el;
}

Intentionally left blank


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Is .tagName niet altijd uppercase? In dat geval zou je de parameter ook naar uppercase kunnen switchen en dan daar direct mee vergelijken. Weer een stukje vrijwel verwaarloosbare performance gewonnen :P

Noushka's Magnificent Dream | Unity


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

Michali schreef op vrijdag 29 juli 2005 @ 10:32:
Is .tagName niet altijd uppercase? In dat geval zou je de parameter ook naar uppercase kunnen switchen en dan daar direct mee vergelijken. Weer een stukje vrijwel verwaarloosbare performance gewonnen :P
Nope, in XHTML zijn tagName en nodeName lowercase, in HTML uppercase (just tested).

Intentionally left blank


  • DPLuS
  • Registratie: April 2000
  • Niet online
jongens, bedankt! Ga ik doen....
Pagina: 1