Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: drzewo DOM relatywnie i przypisywanie zdarzenia wielu elementom
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
onlyX
Problem: Mam grupę linków umieszczonych w różnych blokach DIV, w tych samych blokach są inne linki, z których, po kliknięciu na te pierwsze, chcę wyciągnąć innerHTML, a następnie wstawić do pola TEXTAREA.

Jak na razie udało mi się zrobić tylko to ostatnie:
  1. function userAnswer(){
  2. var tresc = document.getElementById('commbody');
  3. tresc.value += "\n wyciągnięty tekst: ";
  4. }


Chcę uniknąć wpisywania onClick="" każdemu linkowi z osobna, ale nie wiem jak przydzielić je całej grupie elementów o takim samym parametrze w class lub name.

Nie wiem też jak odnieść się do elementu relatywnie w stosunku do tego, dla którego zaszło zdarzenie. Przykładowo dwa razy w górę a potem getElementById('link'). Kiedy używam this to wychodzi referencja do dokumentu a nie do elementu wywołującego zdarzenie.

Trochę to pogmatwałem, ale mam nadzieję, że rozumiecie o co mi chodzi.

Mniej więcej wyglądało by to tak:
  1. function userAnswer(){
  2. nick = elKlikniety.rodzic.rodzic.getElementById('odp').innerHTML;
  3. var tresc = document.getElementById('commbody');
  4. tresc.value += "\n wyciągnięty tekst: ";
  5. }
  6. //tutaj przypisanie w.w. funkcji do elementów od takim samej clasie lub name


Proszę o jakieś wskazówki.
woj_tas
Cytat(onlyX @ 20.03.2007, 23:20:30 ) *
Chcę uniknąć wpisywania onClick="" każdemu linkowi z osobna, ale nie wiem jak przydzielić je całej grupie elementów o takim samym parametrze w class lub name.


nie dawno miałem podobny problem... link
onlyX
Tego szukałem.
A więc koncepcja rozwinęła się do takiego stadium:
  1. function userAnswer(){
  2. var nick = ten_element.rodzic.rodzic.getElementById('nick').innerHTML; // <-- poprawić!!!
  3. var tresc = document.getElementById('commbody');
  4. tresc.value += "\n nick: ";
  5. }
  6. function setBehaviour(){
  7. var linki = document.getElementById('komentarze').getElementsByTagName('a');
  8. for(i=0; i < linki.length; i++){
  9. if (linki[i].className=='answer') linki[i].onclick = userAnswer;
  10. }
  11. }


Teraz pozostało tylko odnaleźć w drzewie DOM drugi link i wyciągnąć z niego innerHTML. Może mi ktoś w tym pomóc, albo wskazać jakieś źródło informacji?
onlyX
Czy ktoś mi wytłumaczy jak odwołać się w JS do elementu który wywołał zdarzenie, bo nie mogę tego znaleźć w żadnych materiałach?
Gdy używam this. to wyrzuca mi cały dokument.
thornag
To w JS jest dosc skomplikowane bo przy zdarzeniu this nigdy nie bedzie sie odnosilo do obiektu w ktorym definiujesz metode. Ja to robie tak biggrin.gif

Kod
var ObjectStorage = new Object();

  TestObject = function() {

         var iObjectId = ObjectStorage.length;
         ObjectStorage[iObjectId] = this;

         this.TestVar = 'zawartosc testowa';

         document.getElementById('testDiv').onclick = function(e) { ObjectStorage[iObjectId].DoOnClick(e) }

  }

  TestObject.prototype = {

   DoOnClick : function(e) {
        if(document.all)e = event;
        var oTarget;
    if (e.target) {
        oTarget = e.target;    
    } else if (e.srcElement) {
        oTarget = e.srcElement;
    }
    if (oTarget.nodeType == 3) { //For Safari
        oTarget = oTarget.parentNode;
    }
    alert(oTarget.id);
    alert(oTarget.innerHTML);
         alert(this.TestVar);

    }
}

document.body.onload = function () { var oObject = new TestObject() }


  1. <div id='testDiv'>aosbdasbd</div>


pisalem z palca wiec nie wiem czy syntaxow nie ma itp, ogolnie koncepcja taka jesli chodzi o to zryte referowanie przez JS
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.