Wątek przeniesiony 2023-06-03 16:20 z JavaScript przez Riddle.

Jak uzyskać ciąg pomiędzy jednym a kolejnym dzieckiem rodzica, ale nie jego przodków

0

Jak uzyskać ciąg pomiędzy dwoma znacznikami dzieci rodzica? Oto przykład:

<p>
Tekst<br>Tekst1<a href="/wiki/tytan">tyt<br>an</a>tekst3<br>Tekst4
</p>

Ciąg pomiędzy pierwszy br, a drugim br, jako dzieci znacznika p, ale nie jego potomków, jest Tekst1<a href="/wiki/tytan">tyt<br>an</a>tekst3. Jak to uzyskać za pomocą JS?

2

w jakim sensie ciąg?
Po co tam robisz br?
Co ma JS do tego?

2

Jakiejś sprytnej funkcji na to nie ma. Trzeba samemu przeiterować.

https://jsfiddle.net/u8k059ag/

0
  1. Wyciągnij swoje <p> (przez document.querySelector() albo innym podobnym)
  2. Przeiteruj po jego dzieciach
  3. Jak napotkasz pierwsze <br/> to zacznij zapisywać elementy do listy
  4. Jak napotkasz drugie, to wyjdź z pętli
  5. Połącz elementy w listy jako tekst w ciąg.
2

Masz 4 różne sposoby rozwiązania tego problemu, nie podam rozwiązania, rozwiązanie podał np. riddle.

  • Ręczne przechodzenie drzewa, możesz chodzić między węzłami, rodzić, dziecko, rodzeństwo.
  • Drugie możesz wykorzystać szukanie po Elementach id, getElementById, gdzie id jednocześnie jest widoczne jako zmienna globalna javascript, więc dobrze możesz wpisać w konsoli nazwę id i będziesz miał obiekt bez szukania.
  • Szukanie po CSS path, czyli querySelector.
  • Lub szukanie po XPath, który w mojej opinii jest najpotężniejszy, ale też może być najbardziej kosztowny obliczeniowo.
    W tym ostatnim można szukać wszystkiego, coś jak regexp, ale dla DOM strony.

Dobrze mógłbyś taki DOM element jak graf przechodzić, czyli robisz przeszukiwanie grafu depth first search lub breadth first search, ewentualnie inny algorytm.

Jeśli strona w ogóle się nie zmienia, to klikasz F12, zaznacz element, zaznaczasz, potem klikasz copy -> css selector lub javascript selector i masz już jak dostać się do tego elementu.
Potem tylko odpowiednie operacje wywołujesz na tym elemencie

1 użytkowników online, w tym zalogowanych: 0, gości: 1