Il problema principale è che non è possibile utilizzare i normali selettori CSS di jQuery per operare una distinzione in base al tipo di elemento, poiché abbiamo sei elementi che vivono all'interno del namespace principale. Se si prova ad utilizzare una sintassi del tipo $('xdc:bookreview') si ottiene un errore, in quanto i browser pensano che si stia utilizzando un nuovo tipo di selettore (questo è normale se si pensa che jQuery utilizza una sintassi CSS-like).

Occorre quindi procedere in modo diverso. Innanzitutto occorre isolare il namespace dal resto e poi utilizzare le proprietà  DOM namespaceURI e localName per distinguere gli elementi. Ecco un esempio di base:

$(document).ready(function(){

   var NS = 'http://www.xml.com/books';
   var contents = [];
   
   $('book').find('*').each(function() {
   
       if($(this).get(0).namespaceURI == NS) {
       
           var local = $(this).get(0).localName;
           var content = $(this).text();
           
           var domBit = local + ': ' + content;
           
           contents.push(domBit);
       
       }
   
   });
   
   $('<ul></ul>').appendTo('body');
   
   for(var i= 0; len = contents.length, i<len; i++) {
   
   
       var part = contents[i];
       $('<li></li>').text(part).appendTo('ul');
   
   
   }
    
});

Dato che per il mio test ho usato un documento XHTML 1.1 servito come application/xhtml+xml si sono rese necessarie alcune precauzioni, come per esempio l'uso di proprietà  e metodi di inserimento che non prevedano l'uso della proprietà  innerHTML. Non ho testato questo esempio con AJAX, quindi lascio a voi, se siete curiosi, il compito di approfondire l'argomento. Un ultima cosa: IE6 e 7 non supportano le proprietà  standard del DOM sopra elencate, quindi... nulla. Come al solito, sono sempre i peggiori browser che ci rallentano.

9 CommentiDi' la tua

Il tuo indirizzo email non sarà mostrato pubblicamente. I campi obbligatori sono contrassegnati da *

Chiedo scusa a tutti, in particolare gianluca, per la mia risposta. Ho questo brutto vizio di prenderla sul personale che mi deriva da questo a sua volta derivato dal tipo di educazione ricevuta (Freud aiutaci :-D )

Gabriele Romanato
Gabriele Romanato

Solo per precisare che la sintassi con tre slash era suggerita da John Resig in un suo post, probabilmente più datato della documentazione :)

Fabrizio Calderan
Fabrizio Calderan

Non hai capito. E' il tono che non va, non il commento. Il tuo é il tono di chi disprezza il contenuto pubblicato e questo non é costruttivo. Limitati per cortesia in futuro a commentare in modo più sobrio onde evitare di far scadere ogni post in una serie di flames inutili. Questo vale anche per gli altri lettori di Edit. Cerchiamo di mantenere un certo controllo che, come ho visto, troppo spesso manca nel web italiano.

Gabriele Romanato
Gabriele Romanato

Fammi capire, un commento che indica la soluzione ufficiale con la fonte per verificare e approfondire non é costruttivo? Cos'é costruttivo, una serie di complimenti incondizionati? Per quanto riguarda la firma, non cerco pubblicità  (oltre al cognome non indico neppure il mio sito), non cerco gloria, cerco solo di lasciare un commento (a mio avviso utile). Spero che su questo glorioso e fondamentale blog ci sia ancora la possibilità  di commentare e firmare in modo diverso da come atteso e voluto da uno degli autori. Domando scusa a tutti per il rumore che, senza volerlo, ho contributo a generare; cercherò di evitare ulteriori sterili polemiche.

gianluca
gianluca

E' il tono che non va, non il commento. C'é modo e modo di commentare: la tua non é una critica costruttiva. Se vai a leggere il mio blog, troverai decine di commenti critici, ma sempre costruttivi. Il mio post, come quelli fatti in precedenza, vuole stimolare la ricerca e l'approfondimento, non dare una "verità " assoluta. Quanto alla correttezza, io ho il coraggio di mettermi in gioco pubblicando con nome e cognome, tu abbi lo stesso coraggio commentando con nome e cognome. grazie.

Gabriele Romanato
Gabriele Romanato

Ciao Gabriele, L'esempio indicato nel primo commento usa una sintassi diversa (con tre back slash) che differisce dalla sintassi ufficiale, per cui ho ritenuto utile indicare fonti precise. Non trovo giustificata la tua reazione: non sì pubblica se nonsi é pronti a eventuali commenti critici; commenti inevitabili se si pubblicano articoli su argomenti di cui non s'é letta la documentazione ufficiale, é già  la seconda volta, in pochi giorni, che ignori la documentazione ufficiale di jQuery e ciò non rende un buon servizio agli utenti. p.s.: il cognome non l'avevo indicato, non mi pare corretto averlo divulgato.

gianluca
gianluca

Gianluca Troiani, potevi risparmiarti la polemica alludendo all'inutilità  del post, secondo te... bastava semplicemente aggiungere un demo come fatto, più correttamente e senza acredine, da Fabrizio. :-)

Gabriele Romanato
Gabriele Romanato

Se usi $('xdc:bookreview') ottieni un array vuoto, se usi $('xdc\\:bookreview') ottieni il risultato voluto. Tutto molto semplice (sempre di jQuery si tratta) e tutto ben documentato nella prima pagina della documentazione ufficiale di jQuery dedicata ai selettori: http://api.jquery.com/category/selectors/

gianluca
gianluca

Dalla versione 1.1.3 di jQuery credo sia possibile usare la sintassi \\\: come in questa demo

Fabrizio Calderan
Fabrizio Calderan