Philipp.: Auf ID von firstChild zugreifen

Hi,

ich möchte mich mit der Tastatur (Pfeiltasten) durch eine li-ste bewegen. Das jeweilige Listenelement soll in ein input-Feld übernommen werden.

Das ganze funktioniert mittels firstChild.nodeValue für eine Liste in diesem Format:

<li>Text</li>  
<li>Text 2</li>

Ich habe aber in jedem Listenelement einen Link und möchte gerne auf dessen id zugreifen:

<li><a id="wert" href="#">Text</a></li>  
<li><a id="wert2" href="#">Text 2</a></li>

Allerdings bekomme ich hier immer nur 'null' zurück.

Wie kann ich jetzt die ID abfangen, gibt es statt nodeValue sowas wie nodeId?

    function keynavigation (obj)  
    {  
      var curElement  = null;  
      var naviElement = null;  
  
      function clearSpaces (strOut)  
      {  
        strOut = strOut.replace(/>\s+/gm, '>');  
        strOut = strOut.replace(/\s+</gm,'<');  
        strOut = strOut.replace(/>\s+</gm,'><');  
  
        return strOut;  
      }  
  
      function keyPressed (evt)  
      {  
        var curKey = evt.keyCode;  
  
        switch (curKey)  
        {  
          case 38:  
          if(curElement && curElement.previousSibling)  
          {  
            curElement = curElement.previousSibling;  
            document.getElementById('check').value = curElement.firstChild.nodeValue;  
          }  
          break;  
  
          case 40:  
          if(curElement)  
          {  
            if(curElement.nextSibling)  
            {  
              curElement = curElement.nextSibling;  
              document.getElementById('check').value = curElement.firstChild.nodeValue;  
            }  
          }  
          else  
          {  
            curElement = naviElement.firstChild;  
            document.getElementById('check').value = curElement.firstChild.nodeValue;  
          }  
          break;  
  
          case 13:  
          if(curElement)  
          {  
          alert(curElement.firstChild.nodeValue);  
          }  
          break;  
          default:  return;  
        }  
      }  
  
      this.init = function ()  
      {  
        eventHandling(document,"keydown",keyPressed);  
        obj.innerHTML = clearSpaces (obj.innerHTML);  
        naviElement   = obj;  
      }  
    }
    <input type="text" id="check">  
        <div>  
          <ul id="navitree">  
            <li><a id="wert1" href="#">Text</a></li>  
            <li><a id="wert2" href="#">Merseburg</a></li>  
          </ul>  
        </div>
  1. Hi,

    Ich habe aber in jedem Listenelement einen Link und möchte gerne auf dessen id zugreifen:

    var a = [li-referenz].getElementsByTagName("a");
    if(a.length) return a[0].id

    Warum postest Du denn so viel unrelevanten Code?

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  2. Hi,

    Das ganze funktioniert mittels firstChild.nodeValue für eine Liste in diesem Format:

    Berücksichtigst Du dabei, daß der Whitespace zwischen den Elementen ggf. ein eigener node ist?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Danke schön.

      Hab's jetzt mal so gemacht: firstChild.id (statt firstChild.nodeValue). Dann muss ich nicht viel ändern. Einwände?

      Berücksichtigst Du dabei, daß der Whitespace zwischen den Elementen ggf. ein eigener node ist?

      Ja:

      function clearSpaces (strOut)  
      {  
        strOut = strOut.replace(/>\s+/gm, '>');  
        strOut = strOut.replace(/\s+</gm,'<');  
        strOut = strOut.replace(/>\s+</gm,'><');  
        
        return strOut;  
      }
      

      Warum postest Du denn so viel unrelevanten Code?

      Damit niemand fragen muss, ob ich Whitespaces berücksichtige :p