2010-09-13 4 views
4

Existe-t-il un moyen simple, par exemple, de supprimer un espace de nom XML, mais de conserver la balise telle quelle avec jQuery ou JavaScript? Par exemple:Un moyen facile de supprimer les espaces de noms XML avec JavaScript?

<html:a href="#an-example" title="Go to the example">Just an Example</html:a> 

Et changer pour:

<a href="#an-example" title="Go to the example">Just an Example</a> 

à la volée avec jQuery ou JavaScript et ne pas connaître les éléments et attributs ou à l'intérieur?

+0

pour être clair, ai-je raison de penser que c'est après avoir été servi comme texte/html et donc analysé comme HTML et non XHTML. Dans quel cas, ce n'est pas une question sur XML ou namespaces, mais sur la conversion d'éléments d'un nom de noeud à un autre en supprimant les caractères dans le nom précédant et en incluant un deux-points? – Alohci

+0

Oui. Le fichier est servi en HTML, pas XHTML (il a un DOCTYPE de ), et, techniquement, oui ce n'est pas son espace de noms XML, mais j'ai pensé qu'il pourrait y avoir un moyen d'analyser le HTML en XML sur les espaces de noms XML est tout parce que $ ('html: a') ou getElementByTagName avec html: a retourne une expression non reconnue. –

Répondre

3

S'il n'y a pas de balise <script> dans le code à remplacer, vous pouvez essayer (demo):

container.innerHTML = container.innerHTML 
           .replace(/<(\/?)([^:>\s]*:)?([^>]+)>/g, "<$1$3>") 
+2

Awesome vous rock, c'est exactement ce dont j'avais besoin! –

+0

Cela échoue pour moi avec ce XML '' It ressemble au http: le confond et il renvoie ceci: '' – Daryl

+0

Voir la mise à jour de la réponse. – galambalazs

0

Ce n'est pas vraiment une réponse, mais vous feriez mieux de gérer ce côté serveur. JavaScript arrive un peu trop tard pour ce genre de tâche ... il se peut que des événements aient déjà été attachés aux nœuds existants et que vous traitiez chaque élément deux fois.

Quel est le but de l'espace de noms?

Si ce sont des fichiers html statiques et que l'espace de noms ne sert à rien, je supprimerais tous les espaces de noms avec une regex. Si elles ne sont pas statiques et si l'espace de noms a un but lorsqu'il est utilisé en tant que xml, vous pouvez effectuer une détection côté serveur pour servir avec le bon doctype et l'espace de noms (le cas échéant).

+0

Pour ce projet spécifique je ne peux pas le faire côté serveur malheureusement. –

0

C'est facile quand vous savez comment ... il suffit d'utiliser \\ pour échapper les deux points afin qu'il ne soit pas analysé comme un délimiteur d'action par le moteur d'analyse jquery.

$('html\\:a').each(function(){ 
    var temp = $(this).html(); 
    $(this).replaceWith("<a>"+temp+"</a>"); 
}); 

Ceci devrait itérer entre chacun de ces éléments et les remplacer par des balises normales. Étant donné que ces derniers sont servis à une fonction de rappel ajax, sinon je ne vois pas pourquoi vous voulez le faire à la volée ... alors la première ligne changerait à:

$.post('...',{}, function(dat){ 
    $(dat).find('html\\:a').each(blah blah .... 
    . 
    . 
}); 

NB, i « m l'un de ces gens terribles qui ne teste vraiment les choses dans FF ...

+0

Merci, mais la chose principale est que je le veux faire, mais aussi ajouter les paramètres aussi ...? –

Questions connexes