Newsgroup: it.comp.lang.javascript
Titolo: filtrare un elemento per un attributo

Ciao a tutti.
Non sono riuscito a trovare risposta a questo mio dilemma:
In una pagina html ho questo codice:
<DIV ID="Contenitore">
<INPUT type="text" ID="Tx1" myAttr="s">
<INPUT type="text" ID="Tx2" myAttr="sa">
<INPUT type="text" ID="Tx3" myAttr="dsf">
<INPUT type="text" ID="Tx4" myAttr=" ">
<INPUT type="text" ID="Tx5" myAttr="abc">
</DIV>
Attualmente ho una funzione javascript di questo genere:
function restituisciElemento(valoreAttr) {
    objDiv=document.getElementById('Contenitore');
    inputs=objDiv.getElementsByTagName('INPUT');
    objInput=false;
    for (counter=0; counter<inputs.length; counter++) {
        if (laInput[llFldCounter].getAttribute('myAttr')==valoreAttr) {
            objInput=inputs[counter];
        }
    }
    return(objInput);
}
Praticamente scandaglia tutti gli INPUT contenuti nel DIV per restituire
quello che ha l'attributo "myAttr" uguale al valore richiesto.
La domanda č: esiste un metodo JavaScript che faccia da sč tutto ciň?
In pratica come esiste getElementsByTagName, non esiste per caso una sorta
di getElementsByAttr al quale passare il nome dell'attributo e il valore da
cercare?
Grazie per le eventuali risposte.
Ciao
    Andrea

 La domanda č: esiste un metodo JavaScript che faccia da sč tutto ciň?
Non e' Javascript, e' DOM. E si, lo puoi fare, usando l'XPath. Ma solo in
Mozilla/Netscape/Firebird. In IE non hai modo di usare l'XPath sul
documento HTML corrente, almeno non in modo nativo. L'unica cosa che su due
piedi mi viene in mente e':
Creare un ActiveXObject di un XMLDocument, caricare con loadXML()
l'outerHTML del nodo che ti interessa, *dopo* averlo normalizzato come XML
- perche' internamente IE, anche se gli passi un documento XHTML well
formed, te lo sputtana una volta che e' in memoria -, esegui la tua XPath e
ottieni un subset di nodi XML. A quel punto pero' per tornare ad avere un
riferimento di nodi HTML devi scorrerteli tutti, recuperare l'ID dai nodi
XML e fare un getElementById.
Non so quanto il gioco valga la candela, se si tratta solo di recuperare
dei nodi in base al valore di un attributo penso che, su IE, proprio non ti
convenga.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 convenga.
No... assolutamente il gioco non vale la candela... aggiungerei che non vale
nemmeno il cerino!  ;-)

 giŕ implementato) ed una per "non IE" (basata su XPath).
Si, credo anche io.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
che sara', non cambia cio' che e'.
Sta a te decidere poi come prendere questa cosa,se logorarsi per un passato
che non puoi cambiare, invece di prendere tutto il bene che il presente ti
offre." ()

 Si, credo anche io.
Beh... decisamente ti ho portato fuori tema... (anche se hai fatto tutte
valide valutazioni!) alla fin fine il risultato è che rimango con il mio
"vecchio" codice javascript!!!!  :-D
Grazie di tutto Zer0!
Alla prox.

 Grazie di tutto Zer0!
De nada!


 "ricordarti di aggiungerlo"? :-)
Beh, se non puoi passare a XHTML, ed il tuo codice risultera' sempre
(leggasi i br a cui mi accennavi prima) "invalidabile", puoi anche evitare
di aggiungere il tuo attributo nella DTD.. gia' hai un documento che non e'
well formed.. ergo non sara' mai validabile tramite DTD nemmeno volendo.
Se invece fosse una pagina "validabile", l'aggiunta nella DTD di attributi
proprietari ti permette di "debuggare" le tue pagine verificandone la
correttezza con un validatore qualsiasi (io me ne sono fatto uno
utilizzando componenti esterni.. ed ho scoperto cose interessanti che manco
sapevo all'epoca, sull'XHTML..)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


"<br>" e quindi possibilmente non valido per XML)
Ho capito male o non puoi passare a XHTML perche' usi "<br>"?
Se e' solo per quello, "br" e' presente nel DTD di XHTML:
http://www.w3.org/TR/xhtml1/dtds.html
'bye

 Ho capito male o non puoi passare a XHTML perche' usi "<br>"?
Se e' come ho capito io, non puo' passare a XHTML perche' parte delle
pagine che lui genera sono date da un input utente che puo' inserire un po'
di puttanai sparsi, tipo appunto un "<br>" invece di un valido "<br />"
XHTML.


 Ecco, questo mi interessa... hai info o tracce da seguire?
Beh, devo ammettere una cosa: Tra i parser che ho avuto modo di provare,
quello Microsoft e' il migliore. Soprattutto per quanto riguarda la
validazione tramite DTD. E sinceramente, per fare un validatore di XML
(ergo di XHTML) ho usato quel componente, creando una HTA e in tre minuti
avevo gia' fatto tutto quel che mi serviva, notifica dell'errore, highlight
del codice, sottolineatura dell'errore con possibilita' di modifica. Il
tutto in HTML. Ma c'e' anche da dire che, questo "tutto", gira solo su
Windows.
Non so di crossplatform cosa ci possa essere di altrettanto immediato e
valido, sinceramente.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,


 valido, sinceramente.
Molto interessante 'sta cosa, in homesite c'è un bel validatore XHTML 
1.0 Strict, ma poterlo fare anche via browser...
Me lo gireresti per darci un occhio?
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
  ---- Bring Your Site To Life!!!!
http://www.wmtools.it
 ---- WebMasterTools - Servizi per il tuo sito
http://www.dev2dev.it
 ---- La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli i PUNTO .

 XHTML.
Beh, questo sarebbe il minimo visto che basterebbe postprocessare 
l'input come probabilmente gia' fa per le accentate.
Personalmente io strippo tutti i tag che inseriscono gli utonti 
salvando, appunto, solo le accentate e gli a capo che trasformo in 
<br />
Probabilmente la questone per il Balestra e' piu' complessa a monte.


 esattamente :-)
Certe volte 'ste intuizioni mi self.spaventano() :-D


 Ecco perche' pensavo di taroccare il DTD, almeno in via transitoria ;o)
Forse l'unica soluzione, ma in effetti non ne vale la pena.
Mi ripeto, prima parlavo del sito (ricordo codice Js inline) ma se c'è 
già un blocco di dati rovinato meglio chiudere gli occhi :-))))
p.s.
Ti ho girato due e-mai che in un certo senso hanno a che fare con questo 
thread, se non ti arriva nulla, please fammi un click che non so a che 
indirizzo mandare.


 una versione alternativa (completa ed integrata)?
Si puo' fare senza problemi. Il punto e' che, purtroppo, ancora nessun
browser supporta l'XHTML a dovere, spesso e volentieri fanno una
"reinterpretazione" interna. Quindi, sintassi *perfettamente* lecite in
XML, su XHTML non funzionano, o meglio, danno un lieve problema di
renderizzazione visiva (in quanto se passate ad un validatore, compreso
quello del w3c, passano senza troppi problemi.. questa cosa l'affrontai
gia' in un post con Riccardo tempo addietro).
Quindi, se a livello di validazione e di codice, utilizzare la DTD pubblica
dell'XHTML, estendendola contemporaneamente con porzioni di DTD privata, e'
perfettamente funzionante, in visualizzazione appare una cosa poco
simpatica.
In attesa che l'XHTML sia perfettamente integrato, ci rimangono due
possibilita':
Scaricare la DTD che ci interessa (XHTML Strict, per esempio), tenerla sul
nostro webserver, ed ampliarla laddove reputiamo necessario (pratica che
sconsiglio); oppure creare una nostra DTD composta *solo* dalle nostre
estensioni alla DTD dell'XHTML, e del quale fa un "include" in testa di
quest'ultima.


, ma poterlo fare anche via browser...
Non gira via browser, o meglio si, ma tramite HTA per una questione di
permessi.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 l'input come probabilmente gia' fa per le accentate.
Stavo solo riprendendo l'esempio (infatti ho detto "tipo") che aveva fatto
Marco. Non conoscendo il codice del suo applicativo, potevo solo prendere
per buono cio' che mi aveva detto, ovvero che porzioni di testo erano
introdotte dall'utente e che normalizzare il tale testo non era del tutto
possibile.
E' ovvio che dubito che si tratti semplicemente di un caso similare,
perche' basterebbe una regexp ad hoc, e sappiamo bene quanto sia abile il
buon Balestra in queste cose. Se quindi non l'ha potuto fare, ci sara'
stata una ragione :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 Ecco perche' pensavo di taroccare il DTD, almeno in via transitoria ;o)
Non e' affatto un "taroccamento", e' una cosa del tutto lecita e anche
consigliata. :) La stessa DTD dell'XHTML e' modulare, in modo tale che si
possa includere nelle proprie DTD solo cio' che ci serve, ed eventualmente
estenderla secondo le nostre necessita'. Del resto, la potenza e
versatilita' dell'XML sta proprio in questo, come dicevo a suo tempo a
Riccardo.
Perche', se e' vero che aggiungere tag o attributi in modo arbitrario non
e' una pratica consigliata; questo e' valido solo in assenza di una
corretta DTD.
Una volta date delle specifiche tramite DTD che regolano i nuovi attributi,
qualsiasi sistema leggendo quel file XHTML sa esattamente "cosa" aspettarsi
e "perche' " da un determinato elemento.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 quella originale (senza scaricarla) e della nostra?
Infatti e' quel che ti ho detto; erano due opzioni. La prima presupponeva
il download della DTD originale con successiva modifica; la seconda la
creazione di una sola DTD che contenesse solo le nostre modifiche e
includesse l'originale in testa.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 un singor programma).
Concordo.
Da un anno cerco di abituarmi ad usare OpenOffice, ma per quanto cerchi 
mi riesce piu' difficile ricondurre alla ragione openoffice che word


 Mo scei un tescioro... Ty :-)
Ma la si figuri.. :)
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,


 ne' capo ne' coda, ergo suppongo non sia quello.. ^_^"
Invece mi sa che e' proprio quello.
Nella sezione VALIDATION (configurazioni varie) spunta SOLO la xhtml e 
nel VALIDATION SETTINGS digli di "report"-are tutto (errori, warning, 
messages, nestings), ma togli (dalla colonna Other) le voci "check for 
quotes in text" e "report special characters".
Io lo uso cosi' ormai da un paio d'anni, e quel che ho validato con 
homesite era altrettanto valido con il 
validator.w3.org
A patto di controllare "a mano" la sezione head che il validatore del 
w3c ignora :-)
Ovviamente cmq anche nel caso di pagine asp/php faccio il controllo solo 
alla fine e solo sul sorgente completo (copYncolla dal view-source di 
mozilla in un doc nuovo di homesite)
