Auf ID von firstChild zugreifen
Philipp.
- javascript
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>
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
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
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