Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473

    Recuperare id ultimo elemento di una lista

    Ciao a tutti.

    ho una lista <ol> che ha dei figli <li> con id numerico.
    questo id può non essere consecutivo, ed è sempre crescente

    Esempio

    [CODE]

    <ol id="lista">
    <li id="1">....</li>
    <li id="2">....</li>
    <li id="5">....</li>
    <li id="10">....</li>
    <li id="11">....</li>
    <li id="12">....</li>
    </ol>

    I figli <li> vengono aggiunti in modo dinamico, faccio un append di un risultatpo di un'elaborazione di una pagina esterna.

    La mia necessità è quella di conoscere l'ultimo id creato, in questa caso l'id 12
    Esiste in javascript una funzione che restituisce l'utlimo id di una lista?

    Grazie


  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Soluzione jquery devi avere la libreria installata
    codice:
    <ol id="lista">
    <li id="1">....</li>
    <li id="2">....</li>
    <li id="5">....</li>
    <li id="10">....</li>
    <li id="11">....</li>
    <li id="12">....</li>
    </ol>
    <script>
    var lastid = $( "#lista li:last" ).attr("id");
    </script>
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Grazie,
    esattamente quale libreria devo installare??

    Ciao

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da androita Visualizza il messaggio
    Grazie,
    esattamente quale libreria devo installare??

    Ciao
    Se è solo per questa operazione non conviene installare la libreria http://jquery.com/download/ visita il sito se ritieni che possa esserti utile anche per altro ok, altrimenti dimmi che eventualmente provo in serata di scrive la stessa funzione in puro js
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    Ho già le seguenti librerie di jquery
    <script src="scripts/jquery.min.js"></script>
    <script src="scripts/jquery.flexslider.js"></script>
    <script src="scripts/jquery.selectnav.js"></script>
    <script src="scripts/jquery.twitter.js"></script>
    <script src="scripts/jquery.modernizr.js"></script>
    <script src="scripts/jquery.easing.1.3.js"></script>
    <script src="scripts/jquery.contact.js"></script>
    <script src="scripts/jquery.isotope.min.js"></script>
    <script src="scripts/jquery.jcarousel.js"></script>
    <script src="scripts/jquery.fancybox.min.js"></script>
    <script src="scripts/jquery.transit-modified.js"></script>
    <script src="scripts/jquery.layerslider-transitions.js"></script>
    <script src="scripts/jquery.layerslider.min.js"></script>
    <script src="scripts/jquery.shop.js"></script>


    ma non funziona..


    Ho trovato questa funzioncina e funziona in parte..

    codice:
    var allTags = document.body.getElementsByTagName("li");
                var tag = allTags[allTags.length-1];
                if (tag.id) {
                id=tag.id;
                }

    Ti spiego brevemente il problema..
    Sto facendo una chat/conversazioni, dove in una pagina controllo ogni 600ms se ci sono dei nuovi messaggi
    Nel mia pagina ho la seguente funzione che ogni 600ms esegue una query tramite una pagina esterna, (nuove_risposte.php) e se la query fornisce dei risultati, accoda alla lista #content_comment_new un figlio <li> con un id univoco del record


    codice:
    function loadXMLDoc() {
              var xmlhttp;
              
              if (window.XMLHttpRequest) {
                  xmlhttp = new XMLHttpRequest();              
              }
              else {// code for IE6, IE5
                  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
              }
              xmlhttp.onreadystatechange = function () {
                  
                  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        // change content from div
                     $("#content_comment_new").append(xmlhttp.responseText);
                  }
              }
              
             
              
               var allTags = document.body.getElementsByTagName("li");
                
                
                var tag = allTags[allTags.length-1];
                if (tag.id) {
                id=tag.id;
                }
                
                
                
                xmlhttp.open("GET", "nuove_risposte.php?id=<?php echo $id_conv;?>&n="+id, true);
                 xmlhttp.send();
                
              
          }
     
          // first page load
          loadXMLDoc();
          
          setInterval(loadXMLDoc, 600); // 2 seconds.

    Il mio ragionamento è stato:
    ogni 600ms controllo se ho un id maggiore e lo accodo alla mia lista, perciò con questa funzione


    codice:
    var allTags = document.body.getElementsByTagName("li");
                var tag = allTags[allTags.length-1];
                if (tag.id) {
                id=tag.id;
                }

    trovo l'ultimo id tra gli <li> della pagina ed eseguo la query nella nuova pagina.

    Ho notato che se metto un alert, e stampo l'id azzerandolo ogni volta che eseguo la funzione


    codice:
    var allTags = document.body.getElementsByTagName("li");
                var tag = allTags[allTags.length-1];
    var id=0;
                if (tag.id) {
                id=tag.id;
                }
    alert(id);

    alla sua prima esecuzione mi stampa l'ultimo id, mentre dalla seconda in poi mi stampa sempre 0!!!
    Sembra che questa funzione funzioni solo la prima volta.

    Perciò avrei bisogno di una funzione che mi trovi l'ultimo id <li> della lista #content_comment_new,
    anche se vengo generati dinamicamente dopo il primo caricamento della pagina.

    Spero di esser stato abbastanza chiaro..

    Grazie


  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    codice:
    var lista = document.getElementById("lista").childNodes,
        ultimo, 
        i = lista.length - 1;
    while (i < -1 && ultimo == undefined) {
        if (lista[i].tagName == "li") {
            ultimo = lista[i];
        }
    }
    
    Id_ultimo = ultimo.id;
    Edit
    Cosa ha che non va il codice di cavicchiandrea?

    Ps
    Il tuo codice è da rivedere: includi jquery e non lo usi quasi (ad esempio semplifica le chiamate ajax)
    Ultima modifica di tampertools; 01-07-2014 a 11:55
    No

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Ajax è asincrono, quando tenti di recuperare le lista, la chiamata non è ancora terminata e la lista non è stata ancora inserita nella pagina. Il codice di Andrea va benissimo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    473
    E' vero scusate funziona!!
    Avevo sbagliato io a richiabare la lista giusta.

    Grazie mille per il supporto.

    P.S. è una pagina parecchio articolata e jquery lo uso per latre cose e non solo per questa porzione di codice.

    Ciaooo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.