ugrás a tartalomhoz

JavaScript: Hierarchikus referencia elemekre

ashita · 2005. Szep. 25. (V), 00.52
Hello,

Felmerult egy aprobb problemam, amiben segitsegeteket kernem:

Adott egy XSL-el eloallitott oldal (amely ebool adodoan szep tiszta hierarchiaval rendelkezik, amelyet nem szeretnek megbontani globalis referenciakkal), ahol tobb blokk talalhato a kovetkezohoz hasonlo koddal:

<div class="list">
  <h3 id="listaCim"><a href="/javascript:;" onClick="switchDescription(this);">ListaNev</a></h3>
 <div class="listDescription" id="description" style="display:none;">
  Lista hosszabb leirasa
 </div>
 <ul id="listBody">
  <li>Valami</li>
...
 </ul>
</div>


Ekkor azt szeretnem, hogy a switchDescription fuggveny valtoztassa a hozza tartozo DESCRIPTION id-ju DIV lathatosagat.
En ezt irtam:

function showDescription(targetObj) {
   
    if (targetObj.parentNode.parentNode.childNodes['description'].style.display != 'block') {
        targetObj.parentNode.parentNode.childNodes['description'].style.display = 'block';
    } else {
        targetObj.parentNode.parentNode.childNodes['description'].style.display = 'none';
    }

}


Na, ez mukodott Operaban, de sem Mozillaban, sem IE-ben nem. A konzol szerint -ha jol emlekszem- az egyik esetben nem letezett 'description' entitas, a masik esetben mar a parentNode-al is gondok voltak.

Valaki tud-e erre cross-browser kompatibilis megoldast?

(masfel ora google utan sem lettem okosabb, pedig allitolag intelligens srac vagyok :)
 
1

Több azonos ID?

Anonymous · 2005. Szep. 25. (V), 02.00
Nem lehet, hogy az a probléma, hogy az id="description" az minden elemnél ugyanaz? Egy oldalon elvileg nem lehet több azonos id.
Ezt úgy szokták, hogy id="description-1", id="description-2", stb.
A js függvénynek meg egyszeruen átadják a számot.

function showDescription(id) {
	var obj=document.getElementById("description-"+id);
	obj.style.display=(obj.style.display=="block")?'none':'block';
}
Gyulus
3

hierarchia

ashita · 2005. Szep. 25. (V), 02.14
Az id nem veletlenul arra szolgal, hogy az azonos szulo alatt levo node-ok kozul kivalaszad a kivantat ?
( XPath: //div[@class="list"]/nodeName[@id="description"] )


//

ashita
4

class

attlad · 2005. Szep. 25. (V), 02.20
Egy bizonyos id-ből csak egy lehet egy dokumentumon belül HTML-ben, miért nem használsz class-t az id helyett is?

Attila
2

<Nincs cím>

attlad · 2005. Szep. 25. (V), 02.14
Miből gondolod, hogy van ilyen? childNodes['description']

DOM specifikációba belenézve mintha az lenne, hogy childNodes visszatérési értéke NodeList, amihez csak egy length tulajdonság és egy item() metódus tartozik. Vagy hol van leírva a fenti?

The items in the NodeList are accessible via an integral index, starting from 0.


Attila
5

Megoldva

ashita · 2005. Szep. 25. (V), 02.56
attlad: kosz a tippet, a classokkal jol mukodik az egesz, a koz erdekeben pedig ime a mukodo kod:

function getClassElement(targetObj,classname){
    var rootlength=targetObj.childNodes.length;
    for (i=0; i<rootlength; i++){
        if (targetObj.childNodes[i].className==classname) {
            return targetObj.childNodes[i];
        }
    }
}

function showDescription(targetObj) {
    var obj= getClassElement(targetObj.parentNode.parentNode,'listDescription');
    obj.style.display=(obj.style.display=="block")?'none':'block';
}
//

ashita