From 0f12973881fd617b52ca12f2c69f0a2d4d4a586c Mon Sep 17 00:00:00 2001 From: dingtalk_dxneyp Date: Tue, 30 Jan 2024 21:31:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=90=9C=E7=B4=A2=EF=BC=8C?= =?UTF-8?q?=E9=87=8C=E9=9D=A2=E7=9A=84=E6=91=98=E8=A6=81=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=A7=86=E8=A7=89=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/search.js | 89 +++++++++++++++++------------------------------- 1 file changed, 32 insertions(+), 57 deletions(-) diff --git a/assets/search.js b/assets/search.js index c6d4973..4d7cf84 100644 --- a/assets/search.js +++ b/assets/search.js @@ -81,83 +81,58 @@ const searchHits = window.bookSearchIndex.search(input.value, 10); searchHits.forEach(function (page) { - const li = element('
  • '); - const a = li.querySelector('a'), small = li.querySelector('small'),span = li.querySelector('span'); + const li = element('
  • '); + const a = li.querySelector('a'), small = li.querySelector('small'); a.href = page.href; a.textContent = page.title; - small.textContent = page.section; - // 使用 Promise+async 实现 - async function asyncFn() { - let returnData = await getSomething(page.href) - return returnData - } - - // 因为asyncFn()返回的是 Promise对象,而不是直接返回值,所以需要.then来获取值进行操作 - asyncFn().then(content => { - // 去除html标签 - content = content.replace(/(<([^>]+)>)/ig, ''); - // 按换行符分割成数组 - let contentArray = lengthCutting(content, 15); - console.log(contentArray) - contentArray.forEach(line => { - if (line.match(/^\s+$/) || line.match(/^[ ]+$/) || line.match(/^[ ]*$/) || line.match(/^\s*$/)) { - console.log(1+line); - return; - } - if (line.search(input.value) != -1 && span.textContent == '') { - console.log(2 + line); - span.textContent = line; - return; - } - }) - if (span.textContent == '') { + fetch(page.href) + .then((response) => response.text()) + .then((content) => { + // Initialize the DOM parser + var parser = new DOMParser(); + // Parse the text + var doc = parser.parseFromString(content, "text/html"); + // You can now even select part of that html as you would in the regular DOM + // Example: + // var docArticle = doc.querySelector('article').innerHTML; + content = doc.querySelector('#content').querySelector('article').textContent + let contentArray = lengthSplit(content, 20); contentArray.forEach(line => { if (line.match(/^\s+$/) || line.match(/^[ ]+$/) || line.match(/^[ ]*$/) || line.match(/^\s*$/)) { - console.log(3 + line); return; } - input.value.split('').forEach(s => { - console.log(1111 + s) - console.log(2222 +line) - if (line.search(s) != -1 && span.textContent == '') { - console.log(4 + line); - span.textContent = line; + if (line.search(input.value) != -1 && small.innerHTML == '') { + small.innerHTML = line.replaceAll(input.value, String.raw`${input.value}`); + return; + } + }) + if (small.innerHTML == '') { + contentArray.forEach(line => { + if (line.match(/^\s+$/) || line.match(/^[ ]+$/) || line.match(/^[ ]*$/) || line.match(/^\s*$/)) { return; } + input.value.split('').forEach(s => { + if (line.search(s) != -1 && small.innerHTML == '') { + small.innerHTML = line.replaceAll(s, String.raw`${s}`); + return; + } + }) }) - }) - } - console.log(888+span.textContent) - }) - + } + }); + results.appendChild(li); }); } -function lengthCutting(str, num) { +function lengthSplit(str, num) { let strArr = []; - for (let i = 0; i < str.length; i += num) strArr.push(str.slice(i, i + num)); - return strArr; } -// 封装数据请求方法(异步) -function getSomething(link) { - return new Promise(resolve => { - var xhr = new XMLHttpRequest(); - xhr.open('GET', link, true); - xhr.send(); - xhr.onreadystatechange = function () { - if (xhr.readyState == 4 && xhr.status == 200) { - resolve(xhr.responseText); - } - } - }) -} - /** * @param {String} content * @returns {Node}