【发布时间】:2020-08-17 05:11:25
【问题描述】:
我正在使用 cordova 制作一个混合应用程序,目前当用户使用搜索功能时,会返回一个可点击的搜索结果列表,每个结果中都会突出显示用户搜索查询。问题是当用户点击结果并将他们带到所述书中搜索查询的确切位置时,我无法弄清楚如何运行我的突出显示功能以突出显示新加载页面上的搜索查询?这里是 Javascript 的新手,我希望我清楚我想说的话。这是问题https://osaintilien55-gmail.tinytake.com/tt/NDU0MzA5OF8xNDQwMDE2Ng的屏幕记录。我将 Lunr.js 用于搜索功能,将 Mark.js 用于突出显示。
这是我的代码中的搜索功能
//Add Event Listener to Search button
document.querySelector(".search-btn").addEventListener('click', searchFunction);
function searchFunction() {
//Clear List
document.querySelector(".results-wrapper").innerHTML = '';
//Store query
var searchQuery = document.querySelector("#search-id").value;
// returns all documents which contain query
var results = idx.search(searchQuery);
var searchResults = results.forEach(function (entry) {
documents.find(findText);
function findText(doc) {
let re = new RegExp(searchQuery, 'i');
console.log(re);
if (doc.name == entry.ref && doc.text.match(re)) {
//and if entry.text contains search query
//Break up string into sentences
var sentences = doc.text.match(/[^\.!\?]+[\.!\?]+/g);
console.log(doc.text);
console.log(sentences);
// console.log("Page " + doc.page + " has the word " + searchQuery + " " + doc.text.search(re));
sentences.forEach(function (sentence) {
if (sentence.match(re)) {
var anchor = document.createElement('a');
anchor.className = 'anchorSearchResult'
anchor.href = doc.href;
//Create "div" element
var div = document.createElement('div');
div.className = 'div-test'
//Creates "h4" element for title
var h4 = document.createElement('h4');
var title = document.createTextNode(doc.name);
h4.className = 'title-results';
//Creates "p" element for sentence
var textElement = document.createElement(p);
var searchResult = document.createTextNode(sentence);
textElement.className = "text-results";
//Creates "p" element for page
var p = document.createElement('p');
var pageResult = document.createTextNode(doc.page);
p.className = "page-results";
h4.appendChild(title);
textElement.appendChild(searchResult);
p.appendChild(pageResult);
div.appendChild(h4)
div.appendChild(textElement)
div.appendChild(p)
anchor.appendChild(div)
document.querySelector(".results-wrapper").appendChild(anchor);
// Highlight Function
var instance = new Mark(document.querySelector(".results-wrapper"));
instance.mark(searchQuery, {
"element": "span",
"className": "highlight"
})
}
})
}
}
//listen for Click event on searchResult list
//onWindowsLoad run Highlight function
//Highlight Function on search query word
//Pass id Query Selector of search query
//Highlight each instance of search query in Id's content
}
)}
【问题讨论】:
-
请在您的问题中发布minimal reproducible example。
-
嘿,这里是我的项目jsfiddle.net/oiver55/naeyqLr1 的小提琴版本。但是在此示例中,结果不可点击,因为在小提琴上我无法加载我项目的其他 html 页面。不确定如何制作一个最小的示例,因为我的项目使用 Mark.js(用于突出显示)和 Lunr.js(搜索功能)。但是,如果它有帮助,这里是我的搜索功能的代码。
标签: javascript