{"ScriptPreparationCode":null,"TestCases":[{"Name":"Fragment","Code":"const htmlString = \u0027\u003Ch1 level=\u00221\u0022\u003E1\u003C/h1\u003E\u003Ch2 level=\u00222\u0022\u003E2\u003C/h2\u003E\u003Ch3 level=\u00223\u0022\u003E3\u003C/h3\u003E\u003Ch4 level=\u00224\u0022\u003E4\u003C/h4\u003E\u003Ch6 level=\u00226\u0022\u003E5\u003C/h6\u003E\u003Ch6 level=\u00226\u0022\u003E6\u003C/h6\u003E\u0027\r\nlet range;\r\nconst extractHeadingFromHtml = (htmlString) =\u003E {\r\n const headings = [];\r\n if (!range) {\r\n range = document.createRange();\r\n }\r\n const fragment = range.createContextualFragment(htmlString);\r\n const hElements = fragment.querySelectorAll(\u0027h1,h2,h3,h4,h5,h6\u0027);\r\n for (let i = 0; i \u003C hElements.length; i\u002B\u002B) {\r\n const { textContent, tagName } = hElements[i];\r\n headings.push({\r\n text: textContent || \u0027\u0027,\r\n level: Number(tagName[1]),\r\n });\r\n }\r\n return headings;\r\n};\r\nextractHeadingFromHtml(htmlString)","IsDeferred":false},{"Name":"DomParser","Code":"const htmlString = \u0027\u003Ch1 level=\u00221\u0022\u003E1\u003C/h1\u003E\u003Ch2 level=\u00222\u0022\u003E2\u003C/h2\u003E\u003Ch3 level=\u00223\u0022\u003E3\u003C/h3\u003E\u003Ch4 level=\u00224\u0022\u003E4\u003C/h4\u003E\u003Ch6 level=\u00226\u0022\u003E5\u003C/h6\u003E\u003Ch6 level=\u00226\u0022\u003E6\u003C/h6\u003E\u0027\r\nlet domParser;\r\n// \u63D0\u53D6html\u5B57\u7B26\u4E32\u4E2D\u7684\u6807\u9898\r\nconst extractHeadingFromHtml = (htmlString) =\u003E {\r\n if (!domParser) {\r\n domParser = new DOMParser();\r\n }\r\n const headings = [];\r\n const hElements = domParser.parseFromString(htmlString, \u0027text/html\u0027).querySelectorAll(\u0027h1,h2,h3,h4,h5,h6\u0027);\r\n for (let i = 0; i \u003C hElements.length; i\u002B\u002B) {\r\n const { textContent, tagName } = hElements[i];\r\n headings.push({\r\n text: textContent || \u0027\u0027,\r\n level: Number(tagName[1]),\r\n });\r\n }\r\n return headings;\r\n};\r\nextractHeadingFromHtml(htmlString)","IsDeferred":false}]}