363 votes

Analyser une chaîne HTML avec JS

Je veux analyser une chaîne qui contient du texte HTML. Je veux le faire en JavaScript.

J'ai essayé le Bibliothèque d'analyseur HTML en JavaScript pur mais il semble qu'il analyse le HTML de ma page actuelle, et non une chaîne de caractères. Car lorsque j'essaie le code ci-dessous, le titre de ma page est modifié :

var parser = new HTMLtoDOM("<html><head><title>titleTest</title></head><body><a href='test0'>test01</a><a href='test1'>test02</a><a href='test2'>test03</a></body></html>", document);

Mon objectif est d'extraire des liens d'une page HTML externe que je lis comme une chaîne de caractères.

Connaissez-vous une API pour le faire ?

3voto

Rafael Mori Points 352

Je pense que le meilleur moyen est d'utiliser este API comme ça :

//Table string in HTML format
const htmlString = '<table><tbody><tr><td>Cell 1</td><td>Cell 2</td></tr></tbody></table>';

//Parse using DOMParser native way
const parser = new DOMParser();
const $newTable = parser.parseFromString(htmlString, 'text/html');

//Here you can select parts of your parsed html and work with it
const $row = $newTable.querySelector('table > tbody > tr');

//Here i'm printing the number of columns (2)
const $containerHtml = document.getElementById('containerHtml');
$containerHtml.innerHTML = ['Your parsed table have ', $row.cells.length, 'columns.'].join(' ');

<div id="containerHtml"></div>

0voto

danish ali Points 69

J'ai dû utiliser innerHTML d'un élément analysé dans le popover de Angular NGX Bootstrap popover. Voici la solution qui a fonctionné pour moi.

public htmlContainer = document.createElement( 'html' );

dans le constructeur

this.htmlContainer.innerHTML = ''; setTimeout(() => { this.convertToArray(); });

 convertToArray() {
    const shapesHC = document.getElementsByClassName('weekPopUpDummy');
    const shapesArrHCSpread = [...(shapesHC as any)];
    this.htmlContainer = shapesArrHCSpread[0];
    this.htmlContainer.innerHTML = shapesArrHCSpread[0].textContent;
  }

en html

<div class="weekPopUpDummy" [popover]="htmlContainer.innerHTML" [adaptivePosition]="false" placement="top" [outsideClick]="true" #popOverHide="bs-popover" [delay]="150" (onHidden)="onHidden(weekEvent)" (onShown)="onShown()">

0voto

Weilory Points 1194
function parseElement(raw){
    let el = document.createElement('div');
    el.innerHTML = raw;
    let res = el.querySelector('*');
    res.remove();
    return res;
}

note : la chaîne brute ne doit pas comporter plus de 1 élément

-1voto

Den Nikitin Points 19
let content = "<center><h1>404 Not Found</h1></center>"
let result = $("<div/>").html(content).text()

contenu : <center><h1>404 Not Found</h1></center> ,
résultat : "404 Not Found"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X