2010-03-19 6 views
51

Je vais créer un élément xml en javascript pour échanger des données avec le serveur. J'ai trouvé que je peux le faire avec document.createElement.But je ne sais pas comment le convertir en chaîne. Y a-t-il une API dans le navigateur pour le rendre plus facile? Ou y a-t-il une librairie js incudiant cette API?Comment convertir un HTMLElement en une chaîne

Merci d'avance.

// Modification

Je trouve que le navigateur API XMLSerializer, il devrait être la bonne façon de sérialisation à chaîne.

+0

Désolé, je ne vous ai pas prises. Alors devrais-je accepter plus de réponses? Mais il semble que certains d'entre eux ne peuvent pas être accoutumés. –

+0

duplication possible de [Création d'un nouvel élément DOM à partir d'une chaîne HTML à l'aide de méthodes DOM intégrées ou d'un prototype] (http://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an- html-string-using-built-in-dom-méthodes-ou-pro) –

Répondre

31

Vous pouvez obtenir le 'externe-html' par clonage de l'élément, ajoutant à un vide, contenant 'hors de la scène', et en lisant innerHTML du conteneur.

Cet exemple prend un deuxième paramètre facultatif.

Appelez document.getHTML (élément, true) pour inclure les descendants de l'élément.

document.getHTML= function(who, deep){ 
    if(!who || !who.tagName) return ''; 
    var txt, ax, el= document.createElement("div"); 
    el.appendChild(who.cloneNode(false)); 
    txt= el.innerHTML; 
    if(deep){ 
     ax= txt.indexOf('>')+1; 
     txt= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax); 
    } 
    el= null; 
    return txt; 
} 
0

Il y a une propriété tagName, et une propriété attributes ainsi:

var element = document.getElementById("wtv"); 
var openTag = "<"+element.tagName; 
for (var i = 0; i < element.attributes.length; i++) { 
    var attrib = element.attributes[i]; 
    openTag += " "+attrib.name + "=" + attrib.value; 
} 
openTag += ">"; 
alert(openTag); 

Voir aussi How to iterate through all attributes in an HTML element? (moi!)

Pour obtenir le contenu entre les balises d'ouverture et de fermeture, vous pouvez probablement utiliser innerHTML si vous ne voulez pas parcourir tous les éléments enfants ...

alert(element.innerHTML); 

... et puis obtenez à nouveau l'étiquette close avec tagName.

var closeTag = "</"+element.tagName+">"; 
alert(closeTag); 
+0

J'ai peur qu'il soit parfois nécessaire d'écrire le code qui obtient le balisage entier. –

+0

Si son XML devrait être dans un seul nœud racine, oui? Si c'est le cas, vous n'avez qu'à le faire pour le nœud racine - innerHTML est supporté par tous les principaux navigateurs et vous donnera le TML X (H) imbriqué dans le nœud racine. (c'est-à-dire tout!) –

+1

Pourquoi s'embêter à faire des boucles sur les attributs de l'élément et à en construire une 'chaîne'? Enveloppez simplement l'élément dans un autre élément et prenez le innerHTML de ce nouvel élément parent. Voila, solution de contournement instantanée pour outerHTML. –

76

L'élément outerHTML propriété (note: supported by Firefox after version 11) renvoie le code HTML de l'élément entier.

Exemple

<div id="new-element-1">Hello world.</div> 

<script type="text/javascript"><!-- 

var element = document.getElementById("new-element-1"); 
var elementHtml = element.outerHTML; 
// <div id="new-element-1">Hello world.</div> 

--></script> 

De même, vous pouvez utiliser innerHTML pour obtenir le code HTML contenu dans un élément donné, ou innerText pour obtenir le texte à l'intérieur d'un élément (de balisage sans HTML).

Voir aussi

  1. outerHTML - Javascript Property
  2. Javascript Reference - Elements
+0

Mais il semble que je ne peux pas obtenir le texte à l'intérieur avec la propriété outerHTML. Je pense que ce que je veux vraiment, c'est le balisage HTML. –

+0

Javascript outerHTML fonctionne réellement? La propriété outerHTML de –

+0

fonctionne correctement dans Chrome. –

0

Cela pourrait ne pas appliquer à tout le monde de cas, mais lors de l'extraction de xml i eu ce problème, que je résolus avec cela.

function grab_xml(what){ 
var return_xml =null; 
    $.ajax({ 
       type: "GET", 
       url: what, 
       success:function(xml){return_xml =xml;}, 
     async: false 
     }); 
return(return_xml); 
} 

alors obtenir le xml:

var sector_xml=grab_xml("p/sector.xml"); 
var tt=$(sector_xml).find("pt"); 

Ensuite J'ai ensuite fait cette fonction pour extraire la ligne xml, quand j'ai besoin de lire à partir d'un fichier XML contenant des balises HTML.

function extract_xml_line(who){ 
    var tmp = document.createElement("div"); 
    tmp.appendChild(who[0]); 
    var tmp=$(tmp.innerHTML).html(); 
    return(tmp); 
} 

et maintenant de conclure:

var str_of_html= extract_xml_line(tt.find("intro")); //outputs the intro tag and whats inside it: helllo <b>in bold</b> 
1

La façon la plus facile à faire est de copier innerHTML de cet élément à la variable et faire tmp vide, puis ajouter de nouveaux éléments, et après que copie de sauvegarde tmp variable à cela. Voici un exemple que j'ai utilisé pour ajouter le script jquery au sommet de la tête.

var imported = document.createElement('script'); 
imported.src = 'http://code.jquery.com/jquery-1.7.1.js'; 
var tmpHead = document.head.innerHTML; 
document.head.innerHTML = ""; 
document.head.append(imported); 
document.head.innerHTML += tmpHead; 

Aussi simple que ça :)

Questions connexes