Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript]Typ najgłębiej zagnieżdzonego elementu
Dapi
post 26.02.2014, 16:08:41
Post #1





Grupa: Zarejestrowani
Postów: 186
Pomógł: 13
Dołączył: 7.08.2009

Ostrzeżenie: (0%)
-----


Witam!
Potrzebuję pobrać za pomocą JS/jQuery pobrać typ najgłębiej zagnieżdzonego dziecka na który nastąpiło kliknięcie.

Przykładowy kod do którego odnosi się problem:
  1. <a href="#"><u><i><b>1234</b>56789</i></u></a>

Po kliknięciu w "1234" chciałbym dostać "B", natomiast po klinięciu w "56789", chciałbym dostać "I".

Kod
$('div.main').on('click', '*', function(e){ /*reszta*/ this.nodeName /*reszta*/})

niestety nie zawsze zwraca mi najgłębiej zagnieżdzony element, tzn w tym przykładzie dla "1234" zwraca "I", a dla "56789" zwraca "U".

Kombinować z odwołaniami do dzieci chyba nie mogę, bo nigdy nie wiem, które dziecko z kolei zostało kliknięte.

Najlepiej by było, gdyby dało się to osiągnąć bez dodatkowych bibliotek.

Jakieś pomysły, jak to osiągnąć?

Ten post edytował Dapi 26.02.2014, 16:09:34


--------------------
www.dapi.net.pl - Wiele technologii, jedna pasja.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
owca_82
post 26.02.2014, 17:37:18
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 8
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


Kod
document.getElementsByTagName('a')[0].onclick = function(event){

    alert(event.target.nodeName);

};


online -> http://jsfiddle.net/8bKzw/1/
Go to the top of the page
+Quote Post
Dapi
post 26.02.2014, 18:14:25
Post #3





Grupa: Zarejestrowani
Postów: 186
Pomógł: 13
Dołączył: 7.08.2009

Ostrzeżenie: (0%)
-----


Obawiam się, że ustawianie akcji dla każdego elementu z osobna nie przejdzie...
Potrzebuję po kliknięciu w link podświetlić jednego diva, po kliknięciu w pogrubienie podświetlić innego, po kliknięciu na czysty tekst usunąć podświetlenie, a jeśli link będzie pogrubiony, podświetlić oba (tu mogę pobrać rodziców, mając najgłębsze dziecko).
Do tego idealnie pasowałoby jQuerowe on('click', '*', function()), ale ono niezbyt celnie określa typ elementu


--------------------
www.dapi.net.pl - Wiele technologii, jedna pasja.
Go to the top of the page
+Quote Post
owca_82
post 26.02.2014, 21:12:52
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 8
Dołączył: 22.04.2012

Ostrzeżenie: (0%)
-----


Nie ustawiam akcji dla każedego elementu z osobna tylko korzystam z tzw. event delegation

Może tak -> http://jsfiddle.net/yUW2X/6/

Ten post edytował owca_82 26.02.2014, 21:13:36
Go to the top of the page
+Quote Post
Dapi
post 26.02.2014, 21:18:11
Post #5





Grupa: Zarejestrowani
Postów: 186
Pomógł: 13
Dołączył: 7.08.2009

Ostrzeżenie: (0%)
-----


Trochę na około, ale mniej więcej sobie poradziłem.
Kod
$('body').on('click', 'div.main', function(e){
    $('.toolbar > div').removeClass('hover');
});
$('div.main').on('click', 'a', function(e){
    setTimeout(function(){
        $('.toolbar > div.anchor').addClass('hover');
    },50);
});
$('div.main').on('click', 'b', function(e){
    setTimeout(function(){
        $('.toolbar > div.bold').addClass('hover');
    },50);
});



Opóźnienie musi być, ze względu na kolejność wykonywania funkcji. Sądzę, że można je jeszcze zmniejszyć, choć już i tak jest niezauważalne praktycznie.

Dzięki za naprowadzenie wink.gif


--------------------
www.dapi.net.pl - Wiele technologii, jedna pasja.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:10