Visualizzazione dei risultati da 1 a 7 su 7

Discussione: getElementsByAttribute

  1. #1

    getElementsByAttribute

    Ho ripescato dalla rete questo script, che permette di prendere un elemento dal valore di un attributo.
    Ad esempio:

    getElementsByAttribute(document, "*", "title", "mio titolo");

    prende tutti i tag della pagina che hanno title impostato a "mio titolo".


    Però non sono riuscito a capire come modificare le proprietà di questi elementi...
    Ho provato così ma non va:

    getElementsByAttribute(document, "*", "title", "mio titolo")[0].setAttribute("href", "http://www.html.it");

    Posto il codice dello script

    codice:
    function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
    	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    	var arrReturnElements = new Array();
    	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    	var oCurrent;
    	var oAttribute;
    	for(var i=0; i<arrElements.length; i++){
    		oCurrent = arrElements[i];
    		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
    		if(typeof oAttribute == "string" && oAttribute.length > 0){
    			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
    				arrReturnElements.push(oCurrent);
    			}
    		}
    	}
    	return arrReturnElements;
    }
    // ---
    if(typeof Array.prototype.push != "function"){
    	Array.prototype.push = ArrayPush;
    	function ArrayPush(value){
    		this[this.length] = value;
    	}
    }
    // ---
    e un file html per provare

    codice:
    <html>
    <head>
    <script src="getElementsByAttribute.js" type="text/javascript"></script>
    <script type="text/javascript">
    mmmvar=new Array();
    getElementsByAttribute(document, "*", "title", "mio titolo")[0].setAttribute("href", "http://www.html.it");
    </script>
    </head>
    <body>
    aaa
    abc
    </body>
    </html>

  2. #2
    Nessuna idea? Credo che questo script potrebbe essere utile a molti...

  3. #3
    hai provato a stampare il contenuto dell'array ritornato dalla funzione??

    se la funzione "funziona" come deve, il tuo ragionamento è giusto...
    www.gext.it

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    il ragionamento e' giusto ma non prevede che gli elementi in questione possano anche non esistere

    in
    getElementsByAttribute(document, "*", "title", "mio titolo")[0].setAttribute("href", "http://www.html.it");
    dai per scontato che esista almeno un elemento con title="mio titolo"
    quando questo non e' vero, nell' esempio, per 2 motivi:
    1- nessun elemento ha title="mio titolo"
    2- anche se avessero il title atteso quando richiami lo script non ci sono gli elementi che ti attendi
    codice:
    <body>
    <script type="text/javascript">
    // script richiamato fuori posto
    // getElementsByAttribute(document, "*", "title", "mio titolo")[0].setAttribute("href", "http://www.html.it");
    </script>
    
    aaa
    abc
    
    <script type="text/javascript">
    // script in posizione accettabile, valutera' i 2 link qui sopra
    getElementsByAttribute(document, "*", "title", "mio titolo")[0].setAttribute("href", "http://www.html.it");
    </script>
    
    </body>
    per evitare errori verifica che esista con un
    if(getElementsByAttribute(document, "*", "title", "mio titolo")[0]){
    // ...istruzioni riguardanti il primo elemento con il title in questione... //
    }

    ciao

  5. #5
    Originariamente inviato da Xinod
    il ragionamento e' giusto ma non prevede che gli elementi in questione possano anche non esistere
    La soluzione è ancora più semplice...
    Lo script non funzionava perchè mi ero dimenticato di mettere un window.onload!
    ( come fai a modificare le proprietà di un elemento prima che si carichi? )

    Grazie lo stesso, anzi scusate per la mia idiozia

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    infatti io parlavo di posizione accettabile per quell' istruzione, non ottimale
    e' chiaro che onload saranno valutati tutti gli elementi

    ma ti ripeto che, cosi' come avevi scritto, viene restituito errore anche richiamandolo onload se non ci sono elementi con quel title

  7. #7
    Certo, ma quando si usa una funzione del genere si presuppone che almeno un elemento con quell'attributo ci sia.
    Non credo sia conveniente mettere un if condizionale a ogni getElementById o ByAttribute, a meno di situazioni particolari.

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.