Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Contare link in uno specifico div

    Salve, con questa semplice istruzione
    codice:
    document.links.length;
    posso conoscere il numero di link (tag <a href="#link1">Clicca</a>...) presenti in una pagina html; sto cercando un'istruzione che restituisca il numero di link in uno specifico div...

    Ho provato con
    codice:
    document.getElementBy("nomeDiv").links.length;
    la console risponde che sto cercando la lunghezza di qualcosa di indefinito.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Non è che lo cerchi il div prima che il sia presente nel documento?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Lo script è volutamente scritto dopo i div.

    Ecco il codice completo di una pagina di esempio semplificata...
    codice:
    <!DOCTYPE html>
    <html>
    <body>
    
    
    <div id="contare">
    	<a href="#html">HTML</a><br>
    	<a href="#css">CSS</a><br>
    	<a href="#xml">XML</a>
    </div>
    <div id="nonContare">
    	<a href="#php">PHP</a><br>
    	<a href="#java">Java</a>
    </div>
    
    
    <script>
    	var conta = document.links.length;
    	alert(conta);
    </script>
    
    
    </body>
    </html>
    L'alert dovrebbe restituire 3, escludendo i link nel div "nonContare", correggendo lo script ovviamente.

  4. #4
    Forse ho trovato...
    codice:
    var conta = document.getElementById("contare").getElementsByTagName("a");
    alert(conta.length);

  5. #5
    La formula, applicata al caso specifico, non va...
    codice:
    var idDestrotag = document.getElementById("destrotag"); // div che voglio gestire
    var conta = idDestrotag.getElementsByTagName("a"); // punto ai link che voglio contare nel div da gestire
    var hComposta = document.getElementsByClassName("headercontent")[0].offsetHeight + 23*conta[0].length;
    Non riesco a determinare length di conta, mi dà undefined.

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,359
    Senza il resto del codice difficile aiutarti. Potrebbe essere qualunque la causa... Hai guardato il debug della pagina ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Nella moltiplicazione devi usare conta.length, non conta[0].length
    conta[0] è un riferimento al primo link della collezione e non ha una proprietà “length”

  8. #8
    Quote Originariamente inviata da lucavizzi Visualizza il messaggio
    Nella moltiplicazione devi usare conta.length, non conta[0].length
    conta[0] è un riferimento al primo link della collezione e non ha una proprietà “length”
    Vero.
    Le istruzioni corrette, o per lo meno le uniche a non darmi undefined nei controlli con l'alert, sono:
    codice:
    var conta = idDestrotag.getElementsByTagName("a").length; // punto ai link del div che voglio gestire
    var hComposta = document.getElementsByClassName("headercontent")[0].offsetHeight + 23*conta;
    Ho qualche difficoltà nell'intuire dove collocare ogni volta l'indice della collezione o il richiamo al valore: essendo getElementsByTagName("a") una serie di tag nel div cui punta destrotag, mi veniva naturale indicizzare lì lo [0], invece già length mi fornisce il numero di elementi nella collezione.

    Ora sta di fatto che il div, scrollando, non si ferma nella posizione corretta e crea anche qualche difetto grafico nel layout.
    La funzione completa è questa, analoga a un'altra perfettamente funzionante quando la pagina è caricata a risoluzione maggiore (gestisco con un if quale funzione avviare e ho risolto un conflitto preesistente).
    codice:
    function fermaScrollSmart() {
    	var idSide = document.getElementById("side"); // elemento di controllo (div del button)
    	var statoSide = window.getComputedStyle(idSide).display; // punto al valore interessante dell'elemento di controllo
    	if (statoSide != "none") { // se il button è visibile sono su smartphone, quindi ok!
    		idHeader = document.getElementById("header"); // elemento da cui prendere la posizione del div da inserire
    		var idDestrotag = document.getElementById("destrotag"); // div che voglio gestire
    		var conta = idDestrotag.getElementsByTagName("a").length; // punto ai link del div che voglio gestire
    		var hComposta = document.getElementsByClassName("headercontent")[0].offsetHeight + 23*conta; // calcolo l'height del div che voglio gestire
    		var fixTop = hComposta + idHeader.offsetHeight - window.innerHeight; // calcolo di quanto il div può salire
    		var correzioneY = - hComposta + window.innerHeight; // calcolo la correzione per fermare il div
    		window.onscroll = function scrolla() {
    			if (window.pageYOffset > fixTop) {
    				idDestrotag.style.position = "fixed";
    				idDestrotag.style.top = correzioneY + "px";
    			} else {
    				idDestrotag.style.position = "static";
    				idDestrotag.style.top = "0px";
    			}
    		}
    	}
    }
    La funzione è richiamata da un onload nel <body>. Spero i commenti siano esaustivi: siccome inizialmente destrotag ha display: none, per determinare la sua posizione iniziale a priori faccio riferimento all'header che lo sovrasta con position: fixed e quindi è sempre visibile e "leggibile" da JS.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.