Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: getElementbyTAG
Forum PHP.pl > Forum > XML, AJAX
trylas
Cześć, chciałbym za pomocą JS odczytac dane z xml. Dane sa zaciagniete i sformatowane przez xslt ->wyswietlane sa linki z imienia i nazwiska nastepnie klikajac na Kowalskiego do JS przekazana jest zmienna Kowalski i jesli Kowalski pasuje z
  1. xmlDocument.getElementsByTagName("Nazwisko")
zaciagam cala Persone.

Jak porownac zmienna z linka i na tej podstawie wyswietlic z calego zbioru dane wlasnie Kowalskiego?jak mozna po kolei to uzyskac --> licze tylko na podpowiedz kolejnych kroków.THNX
  1. <DaneOsobowe>
  2. <Persona>
  3. <Imie>Scottpp</Imie>
  4. <DrugieImie>Tomasz</DrugieImie>
  5. <Nazwisko>Kowalski</Nazwisko>
  6. <DataUrodzenia>25.02.1991</DataUrodzenia>
  7. <Pesel>91022515556</Pesel>
  8. <Email>scotty@isp.net</Email>
  9. <Telefon>58 558 55 25</Telefon>
  10. <TelefonKomorkowy>691 256 258</TelefonKomorkowy>
  11. <Adres>
  12. <Ulica>Rzeznicka</Ulica>
  13. <NrDomu>25</NrDomu>
  14. <NrLokalu>54</NrLokalu>
  15. <Miasto>Gdańsk</Miasto>
  16. <Wojewodztwo>Pomorskie</Wojewodztwo>
  17. <Kod>80-001</Kod>
  18. </Adres>
  19. </Persona>
  20. <Persona>
  21. <Imie>Jack</Imie>
  22. <DrugieImie>Denzel</DrugieImie>
  23. <Nazwisko>Spicy</Nazwisko>
  24. <DataUrodzenia>25.02.1992</DataUrodzenia>
  25. <Pesel>92022515556</Pesel>
  26. <Email>spicy@isp.net</Email>
  27. <Telefon>58 558 55 25</Telefon>
  28. <TelefonKomorkowy>691 256 258</TelefonKomorkowy>
  29. <Adres>
  30. <Ulica>Dluga</Ulica>
  31. <NrDomu>2</NrDomu>
  32. <NrLokalu>5</NrLokalu>
  33. <Miasto>Gdansk</Miasto>
  34. <Wojewodztwo>Pomorskie</Wojewodztwo>
  35. <Kod>80-001</Kod>
  36. </Adres>
  37. </Persona>
  38. </DaneOsobowe>
zegarek84
całe dane masz w tagu "Persona" - więc możesz pobrać referencję do tych elementów np. przez .getElementsByTagName("Persona") - gdy już masz "tablicę"/listę obiektów możesz to przelecieć w pętli i z danego elementu zbioru pobierać nazwisko i porównywać - jeśli nazwisko pasuje zwracasz zbiór - czyli na wzór:
[pętla:]
.getElementsByTagName("Persona")[i].getElementsByTagName("Nazwisko")[0].innerHTML == sNazwisko;
[/pętla]

oczywiście możesz też przelecieć przez nazwiska tak jak zaczynałeś i będziesz miał które to z kolei nazwisko w zmiennej np. i i potem cały zbiór pobierzesz przez:
.getElementsByTagName("Persona")[i]

zamiast innerHTML ja bym użył do porównywania .firstChild.nodeValue lub textContent z połączeniem innerText...
trylas
oki tak to sobie napisałem działa w FF ale w ie nie działa, nie wiem o co chodzi... a do tego debuggowanie w ie to jakies nieporozumienie... a tak wogole to jakich narzedzi uzywac dla ie do debuggowania? zainstalowalem juz debugBar i companionJS ale jakos nie wyswietla mi bledow co do tego skryptu... pozdrawiam
  1. function displayPersona(Nazwisko)
  2. {
  3. var PersonaNodes = xmlDocument.getElementsByTagName("Persona");
  4.  
  5. for(i=0; i<PersonaNodes.length; i++)
  6. {
  7. var NameNodes = xmlDocument.getElementsByTagName("Persona")[i].getElementsByTagName("Nazwisko")[0];
  8.  
  9. var currentNode = NameNodes.firstChild.nodeValue;
  10.  
  11. if(Nazwisko == currentNode)
  12. {
  13. var newEl = document.createElement('div');
  14. newEl.id = 'newText';
  15. document.getElementById('newText').innerHTML = '';
  16.  
  17. tabela=document.createElement('table');
  18. tabela.border='1';
  19. tabela.id='Persona';
  20.  
  21. /* fragment niezbędny dla IE */
  22. tbody=document.createElement('tbody');
  23. tabela.appendChild(tbody);
  24. /* koniec */
  25.  
  26. newTab = document.getElementById('newText');
  27. newTab.appendChild(tabela);
  28.  
  29.  
  30. for (j=0; j<PersonaNodes[i].childNodes.length; j++)
  31. {
  32. var Dane = PersonaNodes[i].childNodes[j];
  33.  
  34. if (Dane.nodeType == 1)
  35. {
  36.  
  37. var newTR = document.createElement('tr');
  38. var newTD = document.createElement('td');
  39. var newTDa = document.createElement('td');
  40.  
  41.  
  42.  
  43.  
  44. var newTxTit = document.createTextNode(Dane.nodeName);
  45. var newTx = document.createTextNode(Dane.firstChild.nodeValue);
  46. var newRow = document.getElementById('Persona');
  47.  
  48. newTDa.appendChild(newTxTit);
  49. newTD.appendChild(newTx);
  50. newTR.appendChild(newTDa);
  51. newTR.appendChild(newTD);
  52.  
  53.  
  54. tbody.appendChild(newTR);
  55. newRow.appendChild(tbody);
  56. }
  57. }
  58. }
  59. }
  60. }
zegarek84
najlepiej przykład live to może przełączę na windows'a którego z pół roku nie uruchamiałem ^^... i takie uwagi - skoro masz referencje do elementów w zmiennych to dlaczego je potem szukasz w drzewie DOM?? i kolejna uwaga:
Kod
            var newEl = document.createElement('div');
            newEl.id = 'newText';
            document.getElementById('newText').innerHTML = '';

jak Ci to ma znaleźć w drzewie dom jak tego jeszcze nie dodałeś do drzewa??...

a i jeszcze jedno - podałeś jedną funkcję bez przykładu live - najlepiej gdzieś to na serwie dawać to prędzej ktoś może łatwo pomóc - gdyż jeszcze może Ci się wysypywać na innych funkcjach - wspomniałeś coś o tym, że działa w FF a w IE nie - a co np. z operąquestionmark.gif - może próbowałeś żywcem przenieść elementy - bywają kwiatki np. z appendChild jeśli ownerDocument się różni między elementami - z kolei nie wszędzie jest importNode ^^ - do poczytania np. Cross-Browser Scripting with importNode() - choć jakbym potrzebował to bym to troszku inaczej zrobił... niestety tak jest z przeglądarkami - nie każda jest taka sama i nie każda dokładnie implementuje jak się to mówi "standardy" - choć w sumie też i one wytaczają standardy - na samym początku gdy było prawie tylko IE to wtedy ono wytyczało standardy, potem przyszedł czas na inne przeglądarki... jesli robi się coś bardziej skomplikowanego to i google chrome potrafi wkurzać ^^
trylas
Co do tego fragmentu kodu napisałem to w ten sposob poniewaz chcialem sprawdzic czy istnieje juz id=newText jesli tak to nalezy tego diva wyczyscic i dopiero dopisac tam nowe dane
  1. var newEl = document.createElement('div');
  2. newEl.id = 'newText';
  3. document.getElementById('newText').innerHTML = '';

jesli chodzi o referencje w zmiennych to moze krotka podpowiedz - lub wskazowka jak Ty bys to rozwiazal.
na zywo tutaj
dzieki i pozdrawiam
zegarek84
masz źle zdefiniowany activex...

sprawdziłem kod i na lokalu i na Twojej stronie - kod który Ci podam będzie działał...

co do referencji to przedewszystkim miałem na myśli, że w pętli nie potrzebnie wyszukujesz po raz kolejny elementy które masz w zmiennych - np w pętli for - tam podstawiłem referencje do tabeli... - ps. można by to lepiej zrobić asynchornicznie ale to już sam sobie w ramach ćwiczeń przepisz ;]
[JAVASCRIPT] pobierz, plaintext
  1. function createDocument(file) {
  2. var xmlDoc;
  3. var moz = document.implementation && document.implementation.createDocument && true;
  4. var ie = !!window.ActiveXObject;
  5.  
  6. if (moz) {
  7. xmlDoc = document.implementation.createDocument("", "", null)
  8. xmlDoc.load(file);
  9. } else if (ie) {
  10. xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  11. xmlDoc.async = false;
  12. xmlDoc.load(file);
  13. while(xmlDoc.readyState != 4) {};
  14. }
  15. return xmlDoc
  16. }
  17.  
  18. var xmlDocument = createDocument("dane_osobowe.xml");
  19.  
  20. function displayPersona(Nazwisko)
  21. {
  22. var PersonaNodes = xmlDocument.getElementsByTagName("Persona");
  23.  
  24. for(i=0; i<PersonaNodes.length; i++)
  25. {
  26. var NameNodes = xmlDocument.getElementsByTagName("Persona")[i].getElementsByTagName("Nazwisko")[0];
  27.  
  28. var currentNode = NameNodes.firstChild.nodeValue;
  29.  
  30. if(Nazwisko == currentNode)
  31. {
  32. var newEl = document.createElement('div');
  33. newEl.id = 'newText';
  34.  
  35. document.getElementById('newText').innerHTML = '';
  36.  
  37. tabela=document.createElement('table');
  38. tabela.border='1';
  39.  
  40.  
  41. /* fragment niezbędny dla IE */
  42. tbody=document.createElement('tbody');
  43. tabela.appendChild(tbody);
  44. /* koniec */
  45.  
  46. newTab = document.getElementById('newText');
  47. newTab.appendChild(tabela);
  48.  
  49.  
  50. for (j=0; j<PersonaNodes[i].childNodes.length; j++)
  51. {
  52. var Dane = PersonaNodes[i].childNodes[j];
  53.  
  54. if (Dane.nodeType == 1)
  55. {
  56.  
  57. var newTR = document.createElement('tr');
  58. var newTD = document.createElement('td');
  59. var newTDa = document.createElement('td');
  60.  
  61.  
  62.  
  63.  
  64. var newTxTit = document.createTextNode(Dane.nodeName);
  65. var newTx = document.createTextNode(Dane.firstChild.nodeValue);
  66.  
  67.  
  68. newTDa.appendChild(newTxTit);
  69. newTD.appendChild(newTx);
  70. newTR.appendChild(newTDa);
  71. newTR.appendChild(newTD);
  72.  
  73.  
  74. tbody.appendChild(newTR);
  75. tabela.appendChild(tbody);
  76. }
  77. }
  78. }
  79. }
  80. }
[JAVASCRIPT] pobierz, plaintext


[edit]
najlepiej to w ramach ćwiczeń zmodyfikuj sobie kod na ajax'a... trzymaj linki:
http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp
http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
http://www.w3schools.com/ajax/ajax_xmlhttp...st_response.asp
http://www.w3schools.com/ajax/ajax_xmlhttp...statechange.asp
trylas
zrobione wg async thnx z profesjonalne wskazowki i rozwiazanie problemu.. pozdrawiam
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.