7
votes

Créer un nœud de la chaîne de balisage

Y a-t-il un moyen de convertir la chaîne de balisage en objet nœud dans JavaScript? En fait, je cherche le sous-titre pour: xxx

quelque chose comme xxx

Utilisation de CreateNodeFromstring Plutôt créant l'élément de table puis appendez ensuite ses éléments d'enfant puis Joignez leurs attributs et valeurs respectifs!


8 commentaires

Je suis curieux, pourquoi régler InnerhTML ne fonctionne pas pour vous. Après avoir défini innerhtml, vous pouvez obtenir l'élément résultant en interrogeant votre divone.


@akonsu, soi-disant que vous avez dans Divone et en dehors de cette div, vous avez un bouton avec Onclick = innerhtml-méthode. Maintenant, dans FF10 et IE9 (avec le mode Document IE9), entrez quelque chose dans la zone de texte et appuyez sur la touche, la valeur de l'entrée serait réinitialisée! J'essaie de voir la même chose se passe avec Appendydild. BTW, en mode compatibilité IE8, la valeur de l'élément d'entrée est persistante ..


Dites-vous que si vous avez un champ de saisie de texte et un bouton, la valeur du champ d'entrée est effacée lorsque vous appuyez sur le bouton? Pourriez-vous démontrer cela, dites, jsbin.com?


Avez-vous envisagé d'utiliser un cadre tel que JQuery? Fait ce genre de tâche beaucoup plus facile ...


Essayez-le dans FF10 ou IE9 avec une compatibilité native, puis dans le mode de compatibilité IE8: JSBIN.com/amodag aussi, < CODE> DOCUMENT.GETTELEMENTBYID ("DIVONE"). APPENDSCHILD (DOCUMENT.CREATRE EELEMENT ("INPUT")) conserve la valeur de l'entrée dans IE9 mais j'ai besoin d'ajouter toute la table dans une seule déclaration.


Pas besoin d'une bibliothèque comme JQuery. Ce type de tâche est assez facile sans.


Ce comportement est parce que innerhtml + = 'foo' est d'abord obtenu innerhtml , puis le réglez sur cette valeur + 'foo' . Parce que innerhtml ne contient pas la valeur actuelle (ainsi que les gestionnaires d'événements et tout ce qui n'est pas visible dans le HTML), tous les éléments correspondants sont reconstruits de la même manière que la première fois qu'ils ont été analysés (donc, en utilisant la valeur par défaut).


@akonsu De nombreux éléments (interactifs) ont un attribut et une propriété. L'attribut est la valeur par défaut et spécifiée dans le HTML. La propriété est dynamique et reflète l'état actuel. Lorsque .innerhtml est utilisé, seuls les attributs sont retournés, pas les propriétés. C'est la cause des champs d'entrée : la valeur la valeur est peut-être une chaîne vide et la valeur propriété n'est pas obtenu via .innerhtml .


4 Réponses :


16
votes

Il n'y a pas une fonction de navigateur croisée existante pour cela. La méthode suivante peut être utilisée pour atteindre l'effet souhaité (à l'aide d'un Documentfragment code> pour une performance optimisée, basée sur Cette réponse a >):

appendStringAsNodes(
    document.getElementById("divOne"),
   "<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>"
);


0 commentaires

4
votes

Oui, vous pouvez le faire.

var myNewTable = document.createElement("table");
myNewTable.innerHTML = "<tbody><tr><td><input type='text' value='0' /></td></tr></tbody>"
document.getElementById("divOne").appendChild(myNewTable);


1 commentaires

Les versions plus anciennes IE vont se plaindre de cela, car elles ne peuvent pas gérer la configuration de la propriété innerhtml sur certains éléments, y compris

. Voir aussi Cet article .



0
votes
function htmlMarkupToNode(html){
    let template = document.createElement("template");        
    template.innerHTML = html ;
    let node = template.content.cloneNode(true) ;        
    return node ;   
}

document.getElementById("divOne").appendChild(htmlMarkupToNode("<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>"));

1 commentaires

Ah, vient de voir votre message maintenant, désolé de l'ajouter moi-même, j'ai essayé d'être un peu plus détaillé si ... BTW Vous pouvez ajouter la langue du code (pour le formater) en ajoutant le nom de la langue après le 3 backtiks



1
votes

Quelques nouvelles sur ce sujet:

L'approche moderne consiste à utiliser la balise


2 commentaires

Nice et efficace, merci! Caniuse.com/?Search=%3ctemplate%3e suggère que nous devrions simplement l'utiliser en ce jour et âge.


Aussi agréable à consulter: WebComponents: développeur.mozilla.org/en-us/ DOCS / Web / Web_Components (, , Shadow Dom, éléments personnalisés) 2) Medium.com/swlh/functional-web-Components-90A0edC2AA90 Pour la programmation fonctionnelle Amis comme moi: Excellent article à utiliser fonctionnel ou OOP pour webcomponents (ou en général)