Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Szukam _ Jak zmniejszyć rozmiar DOM ładując tylko pierwszą stronę tabeli ?

Napisany przez: Blasius 27.09.2021, 19:55:53

Posiadam stronę z prawie 2000 elementami DOM (węzłów), na której znajduje się między innymi prosta tabela napisana za pomocą jQuery z ponad 300 linkami do innych podstron (wzorowana na:)
http://php.net/https://jqueryui.com/tabs/#default, plaintext

  1. <http://december.com/html/4/element/div.html id="tabs">
  2. <http://december.com/html/4/element/ul.html><http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-1" >Al-Ar</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  3. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-2" >Ar-D</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  4. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-3" >E-Ha</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  5. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-4" >Ha-J</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  6. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-5" >K-Mo</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  7. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-6" >Mo-Ro</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  8. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-7" >Ro-So</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  9. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-8" >So-Su</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  10. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html href="#tabs-9" >Su-Z</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html></http://december.com/html/4/element/ul.html>
  11. <http://december.com/html/4/element/table.html class="tablica_X">
  12. <http://december.com/html/4/element/tbody.html>
  13. <http://december.com/html/4/element/tr.html class="tr1"><http://december.com/html/4/element/td.html></http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  14. <http://december.com/html/4/element/tr.html class="tr"><http://december.com/html/4/element/td.html>
  15. <http://december.com/html/4/element/div.html id="tabs-1">
  16. <http://december.com/html/4/element/table.html class="pol">
  17. <http://december.com/html/4/element/tbody.html>
  18. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td10" colspan="4">Al..Ar</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  19. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel1.html">hotel 1</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  20. <http://december.com/html/4/element/td.html class="td2">1</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  21. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel2.html">hotel 2</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  22. <http://december.com/html/4/element/td.html class="td2">2</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  23. ...
  24. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel20.html">hotel 20</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  25. <http://december.com/html/4/element/td.html class="td2">20</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  26. </http://december.com/html/4/element/tbody.html>
  27. </http://december.com/html/4/element/table.html>
  28. <http://december.com/html/4/element/table.html class="pol">
  29. <http://december.com/html/4/element/tbody.html>
  30. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel21.html">hotel 21</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  31. <http://december.com/html/4/element/td.html class="td2">21</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  32. ...
  33. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel30.html">hotel 30</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  34. <http://december.com/html/4/element/td.html class="td2">30</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  35. </http://december.com/html/4/element/tbody.html>
  36. </http://december.com/html/4/element/table.html>
  37. </http://december.com/html/4/element/div.html>
  38. <http://december.com/html/4/element/div.html id="tabs-2">
  39. <http://december.com/html/4/element/table.html class="pol">
  40. <http://december.com/html/4/element/tbody.html>
  41. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td10" colspan="4">Ar...D</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  42. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel31.html">hotel 31</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  43. <http://december.com/html/4/element/td.html class="td2">31</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  44. ...
  45. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel51.html">hotel 51</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  46. <http://december.com/html/4/element/td.html class="td2">51</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  47. </http://december.com/html/4/element/tbody.html>
  48. </http://december.com/html/4/element/table.html>
  49. <http://december.com/html/4/element/table.html class="pol">
  50. <http://december.com/html/4/element/tbody.html>
  51. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel52.html">hotel 52</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  52. <http://december.com/html/4/element/td.html class="td2">52</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  53. ...
  54. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel105.html">hotel 105</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  55. <http://december.com/html/4/element/td.html class="td2">105</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  56. </http://december.com/html/4/element/tbody.html>
  57. </http://december.com/html/4/element/table.html>
  58. <http://december.com/html/4/element/div.html id="tabs-9">
  59. <http://december.com/html/4/element/table.html class="pol">
  60. <http://december.com/html/4/element/tbody.html>
  61. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td10" colspan="4">Su-Z</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  62. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel231.html">hotel 231</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  63. <http://december.com/html/4/element/td.html class="td2">231</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  64. ...
  65. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel301.html">hotel 301</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  66. <http://december.com/html/4/element/td.html class="td2">301</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  67. </http://december.com/html/4/element/tbody.html>
  68. </http://december.com/html/4/element/table.html>
  69. </http://december.com/html/4/element/div.html>
  70. ...
  71. <http://december.com/html/4/element/table.html class="pol">
  72. <http://december.com/html/4/element/tbody.html>
  73. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel302.html">hotel 302</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  74. <http://december.com/html/4/element/td.html class="td2">302</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  75. ...
  76. <http://december.com/html/4/element/tr.html> <http://december.com/html/4/element/td.html class="td1"><http://december.com/html/4/element/a.html href="hotel355.html">hotel 355</http://december.com/html/4/element/a.html></http://december.com/html/4/element/td.html>
  77. <http://december.com/html/4/element/td.html class="td2">355</http://december.com/html/4/element/td.html></http://december.com/html/4/element/tr.html>
  78. </http://december.com/html/4/element/tbody.html>
  79. </http://december.com/html/4/element/table.html>
  80. </http://december.com/html/4/element/div.html>
  81. </http://december.com/html/4/element/tr.html>
  82. <http://december.com/html/4/element/tr.html class="tr1"><http://december.com/html/4/element/td.html></http://december.com/html/4/element/td.html>
  83. </http://december.com/html/4/element/tr.html>
  84. </http://december.com/html/4/element/tbody.html>
  85. </http://december.com/html/4/element/table.html>
  86. </http://december.com/html/4/element/div.html>
  87. </http://december.com/html/4/element/tr.html>
  88. <http://december.com/html/4/element/tr.html class="tr1"><http://december.com/html/4/element/td.html></http://december.com/html/4/element/td.html>
  89. </http://december.com/html/4/element/tr.html>
  90. </http://december.com/html/4/element/tbody.html>
  91. </http://december.com/html/4/element/table.html>
  92. </http://december.com/html/4/element/div.html>
[HTML] pobierz, plaintext

Do tego skrypty:
[JAVASCRIPT] pobierz, plaintext
  1. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  2. <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
  3. <script>
  4. $( function() {
  5. $( "#tabs" ).tabs();
  6. } );
  7. </script>
[JAVASCRIPT] pobierz, plaintext

plus skrypt do otwierania poszczególnych stron z hotelami:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. <!--
  3. onload=function(){
  4. for(i=0;d=document.getElementsByTagName('a')[i++];){
  5. if (d.href.match(/.*hotel\d+\.html/)){
  6. d.onclick=function(){window.open(this.href,'a','width=740px, height=750px, resizable=yes, scrollbars=yes, left=20px, top=20px');return false}
  7. }
  8. }
  9. }
  10. //-->
  11. </script>
[JAVASCRIPT] pobierz, plaintext

Wszystko ładnie działa, ale podczas sprawdzania, np. w PageSpeed Insights pojawia się ostrzeżenie - "Unikaj zbyt dużego DOM - 1795 elementów".
Ponieważ na stronie startowej wyświetla się tylko tablica "#tabs-1", a pozostałe i tak trzeba później kliknąć żeby je zobaczyć, to tablice od "#tabs-2" do "#tabs-9" nie muszą się ładować od razu. I tu prośba o pomoc.
W jaki najprostszy sposób można zoptymalizować rozmiar DOM? Jak zmusić resztę kodu od #tabs-2" do nie ładowania się przy starcie?
I czy JavaScript rzeczywiście opłacalnie przyspieszy ładowanie i działanie strony? Czy sensowniej jest zostawić kod taki jak jest bez JS?

Napisany przez: viking 28.09.2021, 06:02:57

A po co tam tabele?

Napisany przez: Blasius 28.09.2021, 20:11:53

A dlaczego nie?
Po prostu taka tabelka ładnie wygląda.
A mogę poprosić o odpowiedzi na moje pytania?

Napisany przez: trueblue 28.09.2021, 20:40:55

Odpowiedzi są w manualu, do którego zresztą podałeś link.
https://jqueryui.com/tabs/#ajax

Napisany przez: Blasius 28.09.2021, 21:42:49

Tak, wiem, ale żeby załadować kolejne tablice musi być dodany jakiś kod Java Script.
Ja zaś JS w ogóle nie znam, stąd prośba o pomoc.
Wiem, że w głównym katalogu ma być tylko pierwsza tablica - <li><a href="#tabs-1" >Al-Ar</a></li>
A cała reszta w kolejnym lub kolejnych tablicach, ale jak dodać resztę to już nie wiem.
I we wzorcu podają między innymi link do swojej strony "demos", którego ja nie dodaję do swojej strony.

Poza tym chciałbym aby zawsze nowe podstrony otwierały sięw określonej skryptem wielkości.

Napisany przez: Pyton_000 29.09.2021, 20:32:37

Przecież pod spodem jest " view source" z przykładem

Napisany przez: Blasius 1.10.2021, 19:01:55

Dzięki za "otworzenie oczu".
Pokombinowałem i udało się adaptować przykład do moich celów, ale pozostał jeszcze jeden problem.
Otóż nowe okno z wybranym hotelem otwiera się w określonym miejscu i określonych wymiarach TYLKO na pierwszej tablicy, która otwiera się na głównej stronie.
Na kolejnych, dołączanych stronach, powiedzmy wg przykładu, np.
http://php.net/ajax/content1.php, plaintext

  1. <script>
  2. <!--
  3. onload=function(){
  4. for(i=0;d=document.getElementsByTagName('a')[i++];){
  5. if (d.href.match(/.*hotel\d+\.html/)){
  6. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  7. }
  8. }
  9. }
  10. //-->
  11. </script>
[JAVASCRIPT] pobierz, plaintext

poszczególne hotele otwierają się na pełnym ekranie, a chciałbym zachować efekt, jak na pierwszej tablicy, czyli wymiary okna i położenie.
Przyznam szczerze, że tego nie rozumiem.
Mogę prosić o jeszcze jedną podpowiedź.


Napisany przez: trueblue 1.10.2021, 19:09:30

https://www.audero.it/blog/2018/05/16/event-delegation-in-javascript/
i ogólnie:
https://www.google.com/search?q=javacript+delegate+events+anchors

Napisany przez: Blasius 1.10.2021, 22:01:11

Dodałem ten skrypt:

[JAVASCRIPT] pobierz, plaintext
  1. function onClick(event) {
  2. // Prevent the default action
  3. event.preventDefault();
  4.  
  5. // Store the link of the clicked anchor
  6. const url = event.target.href;
  7.  
  8. // Update the results by sending an Ajax request
  9. // to the URL specified in the "url" variable
  10.  
  11. // Update the anchors in the pagination widget
  12. // and remove the event listener on the deleted anchors
  13.  
  14. console.log('Fetching results at ' + url);
  15. }
  16.  
  17. const anchors = document.querySelectorAll('.#tab a');
  18.  
  19. for (let i = 0; i < anchors.length; i++) {
  20. anchors[i].addEventListener('click', onClick);
  21. }
[JAVASCRIPT] pobierz, plaintext

zmieniłem .pagination a
na '.#tab a (nie wiem czy dobrze)
ale gdzie dodać info o wymiarach i położeniu, bo jak poprzednio otwierają się okna na cały ekran?

Napisany przez: trueblue 2.10.2021, 07:00:04

#tabs

To ma być selektor CSS określający, który nadrzędny element (nieładowany poprzez Ajax) będzie przechwytywał zdarzenia, a nie wartość atrybutu href.
Czyli ten drugi skrypt w przykładzie.
Tam oprócz sprawdzania tagu, należy dodać sprawdzanie klasy (musisz nadać klasy elementom <a> w tabeli, aby odróżnić je od elementów <a> w zakładkach.

Porównaj swoją procedurę z nową, dokładnie widać gdzie ma być otwieranie okna.

Napisany przez: Blasius 2.10.2021, 18:57:12

Może zadaję banalne pytania, ale kompletnie nie znam JavaScript, stąd prośba o pomoc.
Zgodnie z poradą zmieniłem skrypt:

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onClick(event) {
  3. // If the event is not triggered on one of the anchors,
  4. // there is nothing we want to do
  5. if (event.target.nodeName !== 'A') {
  6. }
  7.  
  8. // Prevent the default action
  9. event.preventDefault();
  10.  
  11. // Store the link of the clicked anchor
  12. const url = event.target.href;
  13.  
  14. // Update the results by sending an Ajax request
  15. // to the URL specified in the "url" variable
  16.  
  17. // Update the anchors in the pagination widget
  18.  
  19. console.log('Fetching results at ' + url);
  20. }
  21.  
  22. const pagination = document.querySelector('#tabs');
  23.  
  24. pagination.addEventListener('click', onClick);
  25. }
  26. <script>
[JAVASCRIPT] pobierz, plaintext


Ale nie wiem jak mam nadać klasy elementom <a> w tabeli, aby odróżnić je od elementów <a> w zakładkach?
Mam plik css do głównej strony, ale tam mam klasy jak w przykładzie na górze strony - #tabs, tbody, .tr, .td i całą resztę.
Do stron ajax/content1.php do ajax/content8.php nie mam żadnych stylów.
No i nadal, jak poprzednio otwierają się okna na cały ekran.

Napisany przez: trueblue 3.10.2021, 08:24:59

A jak komórkom w tabeli nadałeś klasę td1?

Napisany przez: Blasius 3.10.2021, 19:18:49

Normalnie, w css...

  1. .td1 {
  2. border-bottom: 1px solid black;
  3. border-left: 1px solid #482306;
  4. color: #482306;
  5. font: 16px Tahoma, 'Courier New CE', 'Times New Roman', Times, serif;
  6. padding:5px 0 5px 2px;
  7. text-align : left;
  8. text-decoration: none;
  9. width: 97%;
  10. }


Napisany przez: trueblue 3.10.2021, 21:26:34

A nie wydaje Ci się, że klasy nadałeś w HTML?

Napisany przez: Blasius 3.10.2021, 21:56:42

Nie. Są w pliku*.css

Nie bardzo rozumiem pytanie.
Mam plik *.php i plik *.css ze stylami.
A nie wydaje Ci się, że klasy nadałeś w HTML?
Może nie rozumiem pytania?
Może bardziej łopatologicznie? Nie jestem programistą! A na JS nie znam się kompletnie!

Napisany przez: trueblue 4.10.2021, 07:33:25

Jeśli uważasz, że nadałeś klasy dla tych elementów <td> w CSS, to spróbuj nadać w CSS klasy dla elementów <a>, które chcesz, aby po kliknięciu otwierały okno.

Podpowiem Ci już dalszy krok, po rozwiązaniu powyższego:

  1. if (event.target.nodeName !== 'A' && !event.target.classList.contains('nadana_klasa')) {
  2. }
  3.  
  4. i tu kod otwierania okna

Napisany przez: Blasius 4.10.2021, 19:51:23

Zrobiłem tak:

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onClick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('this.href,.match(/.*hotel\d+\.html/')) {
  4.  
  5. return;
  6. }
  7. event.preventDefault();
  8. const url = event.target.href;
  9. console.log('Fetching results at ' + url);
  10. }
  11. const pagination = document.querySelector('#tabs');
  12. pagination.addEventListener('click', onClick);
  13. }
  14. </script>
[JAVASCRIPT] pobierz, plaintext

Nie pokazuje się kliknięta strona a pojawia się komunikat: Fetching results at https://www.xxx/hotel116.html


Ale dodając w drugiej linii:
[JAVASCRIPT] pobierz, plaintext
  1. if (event.target.nodeName !== 'A' && !event.target.classList.contains('this.href,'a'')) {
[JAVASCRIPT] pobierz, plaintext

lub
[JAVASCRIPT] pobierz, plaintext
  1.    if (event.target.nodeName !== 'A' && !event.target.classList.contains('.td1','a'')) {
[JAVASCRIPT] pobierz, plaintext

pojawia się komunikat
Uncaught SyntaxError: missing ) after argument list
i pojawiają się tylko hotele ze strony głównej. Pozostałe mają komunikat jak wyżej - Fetching results at https://www.xxx/hotel116.html

Wstawiam nie to co trzeba?
w arkuszu stylów mam :
  1. a {
  2. background-color: transparent;
  3. text-decoration: none;
  4. }
  5. .td1 {
  6. border-bottom: 1px solid black;
  7. border-left: 1px solid #482306;
  8. color: #482306;
  9. font: 16px Tahoma, 'Courier New CE', 'Times New Roman', Times, serif;
  10. padding:5px 0 5px 2px;
  11. text-align : left;
  12. text-decoration: none;
  13. width: 97%;
  14. }
  15. .td1 a {
  16. background-color: transparent;
  17. text-decoration: none;
  18. }


puke.gif Sorry za moją niewiedzę! puke.gif


Napisany przez: trueblue 5.10.2021, 06:59:14

Cytat(Blasius @ 4.10.2021, 20:51:23 ) *
Wstawiam nie to co trzeba?

Wstawiasz nie to co trzeba.
Metoda contains przyjmuje jeden argument i jest to string (nazwa klasy).

Google Twoim przyjacielem: https://ferrante.pl/books/html/chapter7.html

Napisany przez: Blasius 5.10.2021, 20:09:20

Zrobiłem tak:
zmieniłem tabelę

  1. <http://december.com/html/4/element/div.html id="tabs">
  2. <http://december.com/html/4/element/ul.html class="site-tabs">
  3. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="#tabs-1" >Al-Aq</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  4. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content1.php" >Aq-D</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  5. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content2.php" >E-Ha</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  6. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content3.php" >Hi-J</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  7. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content4.php" >K-Mi</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  8. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content5.php" >Mo-Ro</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  9. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content6.php" >Ro-Sp</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  10. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content7.php" >St-Su</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  11. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html href="ajax/content8.php" >T-Z</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html></http://december.com/html/4/element/ul.html>

i kod JS:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onClick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('.site-tabs-item ')) {
  4.  
  5. return;
  6. }
  7. event.preventDefault();
  8. const url = event.target.href;
  9. console.log('Fetching results at ' + url);
  10. }
  11. const pagination = document.querySelector('#tabs');
  12. pagination.addEventListener('click', onClick);
  13.  
  14. </script>
[JAVASCRIPT] pobierz, plaintext

Do tego w arkuszu stylów dodałem kontrolnie byle jakie parametry klasy:
  1. .site-tabs {
  2. background-color: LightCyan;
  3. list-style: none;
  4. padding: 0;
  5. width: 200px;
  6. border: 1px solid LightBlue;
  7. }
  8. .site-tabs .site-tabs-item {
  9. border-bottom: 1px solid LightBlue;
  10. padding: 5px;
  11. }
  12. .site-tabs .site-tabs-item:last-child {
  13. border-bottom: 0;
  14. }
  15. .site-tabs .site-tabs-item a {
  16. color: black;
  17. text-decoration: none;
  18. }
  19. .site-tabs .site-tabs-item a:hover {
  20. text-decoration: underline;
  21. }

No i znowu nie pojawiają się strony z hotelami tylko taki komunikat: Fetching results at https://www.xxx/hotel127.html
Czyli są pobierane, ale nie wyświetlane. Dlaczego - nie mam pojęcia.
Na pewno napiszesz, że znowu źle coś robię. I na pewno to będzie prawda... Niestety.

Napisany przez: trueblue 6.10.2021, 10:00:15

Klasę powinieneś nadać elementowi <a>, przecież od kilku postów o tym piszemy.

Funkcja wyświetla wyłącznie: "Fetchning...", bo taki jest jej kod.
Gdzie tam jest otwieranie okna?

Napisany przez: Blasius 6.10.2021, 21:59:49

Zmieniłem

[JAVASCRIPT] pobierz, plaintext
  1. if (event.target.nodeName !== 'A' && !event.target.classList.contains('.site-tabs-item ')) {
[JAVASCRIPT] pobierz, plaintext

na
[JAVASCRIPT] pobierz, plaintext
  1. ]if (event.target.nodeName !== 'A' && !event.target.classList.contains('.site-tabs .site-tabs-item a ')) {
[JAVASCRIPT] pobierz, plaintext

z kropką i bez. Próbowałem wszystkiego, co mi przyszło na myśl. I nic.
Pisałem wcześniej, że JavaScript jest mi kompletnie nieznany.
Nic więcej nie wymyślę.
Domyślam się, że próbujesz mnie naprowadzać, ale jak widzisz nie łapię JS za cholerę...

Napisany przez: viking 7.10.2021, 05:24:07

Classlist to taki worek na klasy (lista klas na elemencie). Contains sprawdza czy dana klasa jest w zbiorze (wystarczy poświęcić minutę na znalezienie czegokolwiek o tym). Czy według ciebie jakaś ścieżka do węzła "a" to klasa?

Napisany przez: Blasius 7.10.2021, 19:55:56

W końcu pojąłem...
Ale nie spotkałem się nigdzie wcześniej z klasą dla <a>. Może to mnie w jakimś stopniu tłumaczy.
Zrobiłem tak:

  1. <http://december.com/html/4/element/div.html id="tabs">
  2. <http://december.com/html/4/element/ul.html class="site-tabs">
  3. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="#tabs-1" >Al-Aq</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  4. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content1.php" >Aq-D</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  5. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content2.php" >E-Ha</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  6. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content3.php" >Hi-J</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  7. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content4.php" >K-Mi</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  8. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content5.php" >Mo-Ro</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  9. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content6.php" >Ro-Sp</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  10. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content7.php" >St-Su</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  11. <http://december.com/html/4/element/li.html class="site-tabs-item"><http://december.com/html/4/element/a.html class="hotel" href="ajax/content8.php" >T-Z</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html></http://december.com/html/4/element/ul.html>

do tego
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onClick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('hotel')) {
  4.  
  5. return;
  6. }
  7. event.preventDefault();
  8. const url = event.target.href;
  9. console.log('Fetching results at ' + url);
  10. }
  11. const pagination = document.querySelector('#tabs');
  12. pagination.addEventListener('click', onClick);
  13.  
  14. </script>
[JAVASCRIPT] pobierz, plaintext

plus
  1. a.hotel:link,
  2. a.hotel:visited {
  3. background-color: transparent;
  4. color: navy;
  5. text-decoration: underline;
  6. }
  7. a.hotel:hover,
  8. a.hotel:focus,
  9. a.hotel:active {
  10. background-color: red;
  11. }
  12. .site-tabs {
  13. background-color: LightCyan;
  14. list-style: none;
  15. padding: 0;
  16. width: 200px;
  17. border: 1px solid LightBlue;
  18. }
  19. .site-tabs .site-tabs-item {
  20. border-bottom: 1px solid LightBlue;
  21. padding: 5px;
  22. }
  23. .site-tabs .site-tabs-item:last-child {
  24. border-bottom: 0;
  25. }
  26. .site-tabs .site-tabs-item a {
  27. color: black;
  28. text-decoration: none;
  29. }
  30. .site-tabs .site-tabs-item a:hover {
  31. text-decoration: underline;
  32. }

Ale nadal nie otwierają się okna, a pojawiają się:
komunikat: Fetching results at https://www.xxx/ajax/content8.php
oraz komunikat: Fetching results at https://www.xxx/hotel127.html
Wiem, że trzeba dodać polecenie otwarcia okna, ale nie umiem tego zrobić w przypadku tego kodu JS.

Napisany przez: trueblue 7.10.2021, 20:44:06

Przecież kod do otwierania okna jest we wcześniejszym skrypcie, który pokazałeś i stosowałeś.

Napisany przez: Blasius 7.10.2021, 20:48:43

Ten?

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. <!--
  3. onload=function(){
  4. for(i=0;d=document.getElementsByTagName('a')[i++];){
  5. if (d.href.match(/.*hotel\d+\.html/)){
  6. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  7. }
  8. }
  9. }
  10. //-->
  11. </script>
[JAVASCRIPT] pobierz, plaintext

Mimo zastosowania pojawia się nadal:
komunikat: Fetching results at https://www.xxx/ajax/content8.php
oraz komunikat: Fetching results at https://www.xxx/hotel127.html
Nic nie rozumiem...

Napisany przez: trueblue 8.10.2021, 09:19:01

Nie chodzi o to, abyś ten kod jako całość wkleił znów na stronę, bo przecież przygotowałeś nowy skrypt od obsługi linków.
Chodzi tylko o otwieranie okna, a to jest dokonywane poprzez window.open

Napisany przez: Blasius 11.10.2021, 20:23:44

Poddaję się.
Wierz mi, że próbowałem. kilkadziesiąt różnych wariantów, ale efekt - żaden.
Jeszcze raz napiszę - KOMPLETNIE NIE ZNAM JAVASCRIPT.
Dla tego jednego skryptu nie będę uczył się całego kursu JS.

Jeśli możesz dać jakąś konkretną wskazówkę, będę wdzięczny, jeśli nie, to trudno. Strona będzie większa.

Napisany przez: trueblue 12.10.2021, 10:34:57

Podałem Ci wskazówkę w poprzednim poście.

Napisany przez: Blasius 12.10.2021, 19:06:20

Wymęczyłem (czytaj - znalazłem i trochę zmieniłem) takie dwa skrypty:

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onclick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('hotel')) {
  4. }
  5.  
  6. event.preventDefault();
  7. const url = event.target.href;
  8. console.log('Fetching results at ' + url);
  9.  
  10. }
  11. const pagination = document.querySelector('a');
  12. pagination.addEventListener('click', onclick);
  13.  
  14. </script>
  15. <script>
  16. var myHTML = document.querySelector('html');
  17. myHTML.onclick = onload=function(){
  18. for(i=0;d=document.getElementsByTagName('a')[i++];){
  19. if (d.href.match(/.*hotel\d+\.html/)){
  20. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  21. }
  22. }
  23. }
  24. </script>
[JAVASCRIPT] pobierz, plaintext

W http://php.net/"ajax/content1.php
zostawiłem kod:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. <!--
  3. onload=function(){
  4. for(i=0;d=document.getElementsByTagName('a')[i++];){
  5. if (d.href.match(/.*hotel\d+\.html/)){
  6. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  7. }
  8. }
  9. }
  10. //-->
  11. </script>
[JAVASCRIPT] pobierz, plaintext

Działa jak chcę żeby działał.
Tylko dlaczego po naciśnięciu kolejnego tab/li cała tabela obniża się o około 40px (oczywiście tylko jej legenda zostaje na miejscu, a obniża się lista hoteli) skoro nic w *css nie zmieniałem?
  1. <http://december.com/html/4/element/div.html id="tabs">
  2. <http://december.com/html/4/element/ul.html>
  3. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html class="hotel" href="#tabs-1" >Al-Aq</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  4. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html class="hotel" href="ajax/content1.php" >Aq-D</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html>
  5. <http://december.com/html/4/element/li.html><http://december.com/html/4/element/a.html class="hotel" href="ajax/content2.php" >E-Ha</http://december.com/html/4/element/a.html></http://december.com/html/4/element/li.html> itd...

Jest jakiś sposób aby to poprawić? Pewnie właśnie w css?


P.S. Wskazówkę dałeś, chociaż nie udało mi się chyba pójść Twoim torem myślenia... Ale - DZIĘKI exclamation.gif!

Napisany przez: trueblue 13.10.2021, 08:07:53

Nie wiem dlaczego uparcie wklejasz stary kod, skoro napisałem abyś tego nie robił.

  1. <http://december.com/html/4/element/script.html>
  2. function onClick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('hotel')) {
  4. return;
  5. }
  6. event.preventDefault();
  7. window.open(event.target.href, 'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');
  8. }
  9.  
  10. const pagination = document.querySelector('#tabs');
  11. pagination.addEventListener('click', onClick);
  12. </http://december.com/html/4/element/script.html>

Napisany przez: Blasius 14.10.2021, 21:33:26

A przeczytałeś, że KOMPLETNIE NIE ZNAM JAVASCRIPT?
Właśnie dlatego wklejałem na czuja ten kod. I udało się, bo na szczęście znalazłem w necie poniższy (ten drugi) skrypt:

[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. function onclick(event) {
  3. if (event.target.nodeName !== 'A' && !event.target.classList.contains('hotel')) {
  4. }
  5.  
  6. event.preventDefault();
  7. const url = event.target.href;
  8. console.log('Fetching results at ' + url);
  9.  
  10. }
  11. const pagination = document.querySelector('html');
  12. pagination.addEventListener('click', onclick);
  13.  
  14. </script>
  15. <script>
  16. var myHTML = document.querySelector('html');
  17. myHTML.onclick = onload=function(){
  18. for(i=0;d=document.getElementsByTagName('a')[i++];){
  19. if (d.href.match(/.*hotel\d+\.html/)){
  20. d.onclick=function(){window.open(this.href,'a','width=740, height=750, resizable=yes, scrollbars=yes, left=20, top=20');return false}
  21. }
  22. }
  23. }
  24. </script>
[JAVASCRIPT] pobierz, plaintext

Ten działa jak chciałem.
Twój też, aczkolwiek nie działa otwieranie nowych okien o określonych wymiarach.
Wiem, że Twój jest elegancki i krótszy., a jeśli chce się Tobie poprawić, to byłoby fajnie.
Oczywiście dziękuję za pomoc! thumbsupsmileyanim.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)