1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
// Leave only opening `td` tags
import { strict as assert } from "assert";
import { stripHtml } from "../dist/string-strip-html.esm.js";
const someHtml = `<table width="100" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="col1">
cell1
</td>
<td class="col2">
cell2
</td>
</tr>
<tr>
<td class="col3">
cell3
</td>
<td class="col4">
cell4
</td>
</tr>
</table>`;
// the first way
// -----------------------------------------------------------------------------
assert.equal(
stripHtml(someHtml, {
// notice there's no: onlyStripTags: ["td"]
// we operate purely via callback
cb: ({ tag, deleteFrom, deleteTo, insert, rangesArr, proposedReturn }) => {
if (tag.name === "td" && !tag.slashPresent) {
rangesArr.push(proposedReturn);
}
},
}).ranges.reduce(
(acc, [from, to]) => `${acc}${someHtml.slice(from, to).trim()}`,
""
),
`<td class="col1"><td class="col2"><td class="col3"><td class="col4">`
);
// the second way:
// -----------------------------------------------------------------------------
let resultStr = "";
// notice we don't even assign stripHtml() output to anything - we rely only
// on the callback, it mutates the "resultStr" in the upper scope
stripHtml(someHtml, {
// notice there's no: onlyStripTags: ["td"]
// we operate purely via callback
cb: ({ tag, deleteFrom, deleteTo, insert, rangesArr, proposedReturn }) => {
if (tag.name === "td" && !tag.slashPresent) {
resultStr += someHtml.slice(deleteFrom, deleteTo).trim();
}
},
});
assert.equal(
resultStr,
`<td class="col1"><td class="col2"><td class="col3"><td class="col4">`
);
|