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.
  1. function showDescription(id) {  
  2.     var obj=document.getElementById("description-"+id);  
  3.     obj.style.display=(obj.style.display=="block")?'none':'block';  
  4. }  
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:
  1. function getClassElement(targetObj,classname){  
  2.     var rootlength=targetObj.childNodes.length;  
  3.     for (i=0; i<rootlength; i++){  
  4.         if (targetObj.childNodes[i].className==classname) {  
  5.             return targetObj.childNodes[i];  
  6.         }  
  7.     }  
  8. }  
  9.   
  10. function showDescription(targetObj) {  
  11.     var obj= getClassElement(targetObj.parentNode.parentNode,'listDescription');  
  12.     obj.style.display=(obj.style.display=="block")?'none':'block';  
  13. }  
//

ashita