Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JQ] Usuniecie 2-ch elementow, rodzic i 1 krok po drzewie DOM
Kostek.88
post
Post #1





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Witam, mam taki kod:

  1. <dl id="maintabs">
  2. <dt id="tab1">Tab 1<a href="#" class="close">x</a></dt>
  3. <dd>
  4. Content 1<br />
  5. Content 1<br />
  6. Content 1<br />
  7. </dd>
  8. </dl>


i usuwam poleceniem (linkn z klasa close) zakladke

  1. $(this).parent('dt').remove();


Wszystko dobrze, ale potrzebuje drugiego polecenia, zeby usunac DD. Dodawanie klas odpada, bo zakladek ma byc wiele, maja byc rozne/dynamiczne.

Czy ma ktos jakies pomysly? Probowalem .parents(), .parent().parent, .parent(2), .closest(), .find(), ale moje wysilki spelzly na niczym...

Ten post edytował Kaloryfer 1.11.2011, 17:43:41
Go to the top of the page
+Quote Post
esp
post
Post #2





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 18.09.2006
Skąd: Skarżysko

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


A może tak (zakładając że klikasz class=close):
[JAVASCRIPT] pobierz, plaintext
  1. $(function (){
  2. $(".close").click(function(){
  3.  
  4. $(this).parent().siblings().remove();
  5. });
  6. });
[JAVASCRIPT] pobierz, plaintext

Go to the top of the page
+Quote Post
Kostek.88
post
Post #3





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Przetestowalem te funkcje, ale daje rezulat, ze usuwane sa wszystkie zakladki wraz z trescia z wyjatkiem tej zakladki ktora kliknalem... sprobowalem przefiltrowac to po jakims tagu, ale tez bez zmian... przeczytalem tu http://api.jquery.com/siblings/ , ale moim zdaniem to nie ta funkcja. Ma ktos inne pomysly badz po prostu naprowadzi mnie na cos innego? Pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


To może po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. $(function() {
  2. $(".close").click(function(){
  3. $(this).parent('dt').remove();
  4. $(this).parent('dd').remove();
  5. });
  6. });
[JAVASCRIPT] pobierz, plaintext

Pamiętaj, że .remove() powoduje usunięcie elementu HTML ze struktury DOM. Jeśli chcesz ukryć element zastosuj .hide().
Go to the top of the page
+Quote Post
Kostek.88
post
Post #5





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Spojrz na moja strukture. Rodzicem dla a.close jest tylko DT. DD jest poza DT, rodzicem dla DT jest natomiast DL. Mozna wejsc 2 poziomy wyzej, dac .find('dd').remove, ale usuwa wszystkie DD, a jak wspomnialem - dodawanie klas odpada...

Mnie potrzebny jest remove, gdyz na stronie ma byc otwartych wiele zakladek z innymi zakladkami + wiele opcji na nich. Ladowanie tresci do zakladek ma odbywac sie za pomoca AJAX lub prostego .load()

PS. Ten kod dziala tak, ze usuwany jest tylko rodzic DT (sama zakladka). Niestety nie usuwa zawartosci (DD)...

Ten post edytował Kaloryfer 2.11.2011, 10:40:29
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


No tak, zresztą podany wyżej skrypt i tak nie działa, bo jak już usuniesz element HTML, to nie masz do niego dostępu poprzez this. Trzeba zrobić tak:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. $(".close").live("click", function(){
  3. $(this).parent().next("dd").remove();
  4. $(this).parent().remove();
  5. });
  6. });
[JAVASCRIPT] pobierz, plaintext


Ten post edytował mortus 2.11.2011, 11:14:59
Go to the top of the page
+Quote Post
Kostek.88
post
Post #7





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Dzieki stary (IMG:style_emoticons/default/smile.gif) Ze tez nie wpadlem na .next(). A napisz mi, jak mozesz, jeszcze jedno:

1) dlaczego w tym przykladzie uzyles $(document).ready zamiast po prostu $( ?

2) jaka w tym wypadku roznice robi live w 2. linijce?

Pozdrawiam
Go to the top of the page
+Quote Post
mortus
post
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


1. Z przyzwyczajenia.
2. Jeśli zakładki będą się również pojawiać, to aby obsłużyć zdarzenie kliknięcia x po pojawieniu się takowej zakładki trzeba jej przypisać to zdarzenie za pomocą JS. W czystym JS trzeba trochę "pokombinować", w jQuery wystarczy nam .live().
Go to the top of the page
+Quote Post
Kostek.88
post
Post #9





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

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


Dzieki, juz wszystko wiem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 10:34