javascript - 单击链接并加载新页面后,我该如何运行功能?
问题描述
我正在使用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
}
)}
解决方案
您可以使用查询字符串。例如,函数的参数存储在名为 的查询字符串中params
。
您可以读取查询字符串。然后JSON.parse()
在查询字符串上使用。然后使用 ES6 扩展运算符 ( ) 使用解析后的数组运行函数...
。
例子:
var params = new URLSearchParams(window.location.search) // Create a URLSearchParams object
function myFunction(a, b, c) {
alert(a + ' ' + b + ' ' + c)
}
myFunction(...JSON.parse(params.get('params'))) // Run function with parsed params
示例- 尝试更改名为params
. 如果您使用字符串,请使用双引号,因为 JSON 需要双引号,而我们正在使用JSON.parse()
查询字符串必须是一个数组。例如:
[1, 2, 3]
["One", "Two", "Five"]
[[], [], []]
推荐阅读
- arrays - 如何使用节点在猫鼬的深度嵌套数组中获取对象
- javascript - ColResizeable 插件 - 不支持模态/弹出窗口中的表格
- python - 内置方法不能直接作用于对象的值,而是在传递对象的引用时工作
- python - 动态获取与两个 Django 模型相关的字段名称
- excel - 将组合框添加到 Excel
- amazon-web-services - 由于配置错误,执行失败:发回嵌套 JSON 值时 Lambda 代理响应格式错误
- postgresql - 在 postgresql 中添加带有时间计算的列
- python - 无法在 GCP 中使用 Papermill 将函数从一个 jupyter 笔记本(.ipynb)调用到另一个(.ipynb)
- python - 根据其他列的标准在另一列的新列中插入值
- java - 为什么我的 try catch 方法没有显示我为输入的字符串而不是整数编写的错误消息?(爪哇)