【发布时间】:2020-04-21 22:11:08
【问题描述】:
我正在创建一个网站并添加了一个 wikipedia JSON 函数,我已经让它工作了,点击时会加载 wikipedia 搜索列表,但我还想添加一个按钮以在列表加载后清除列表,目前,我必须刷新页面才能使列表脱离页面。
我是 Javascript 的新手,我添加了按钮并添加了一个常量。我的一段代码可以在 codepen 上看到:https://codepen.io/Jaderianne/pen/PoPbEyN 还有这里:
"use strict";
(function() {
const xhr = new XMLHttpRequest();
const queryBox = document.getElementById("wikiQuery");
const searchForm = document.getElementById("wikiForm");
const demoJSON = document.getElementById("demo");
const deleteBtn = document.getElementById("deleteBtn");
// the base for the request url
const baseURL = "https://en.wikipedia.org/w/api.php? \
format=json& \
action=query& \
generator=search& \
gsrnamespace=0& \
gsrlimit=10& \
prop=info|extracts|langlinks|pageimages& \
inprop=url& \
exintro& \
explaintext& \
exsentences=1& \
exlimit=max& \
llprop=url& \
lllimit=max& \
piprop=thumbnail|name& \
origin=*& \
gsrsearch=";
function gatherData(data) {
let theData = "";
let langLinks = "";
let img = "<img>";
const languages = ["en", "de", "zh", "fr", "es", "ja", "ar", "ko", "el"];
let k;
let key;
for (key in data.query.pages) {
let tmp = data.query.pages[key];
if (tmp.thumbnail) {
img = `<img src="${tmp.thumbnail.source}" alt="${tmp.title}"> `;
}
let title = `<strong><a href="${tmp.fullurl}">${tmp.title}</a></strong>`;
let extract = `<span class="txt">${tmp.extract}</span>`;
langLinks = "";
for (k in tmp.langlinks) {
if (languages.includes(tmp.langlinks[k].lang)) {
langLinks += `<a href=${tmp.langlinks[k].url}>${tmp.langlinks[k].lang}</a> `;
}
}
theData += `<li>${img} ${title} ${extract} <span class="langs">${langLinks}</span></li>`;
}
demoJSON.innerHTML = theData;
}
// the API call is triggered once the user submits a query
searchForm.addEventListener("submit", function(ev) {
let wiki = baseURL + queryBox.value;
xhr.open("GET", wiki, true);
xhr.setRequestHeader('Api-User-Agent', 'Example/1.0');
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
let response = JSON.parse(xhr.responseText);
gatherData(response);
}
};
// clear the search box
queryBox.value = "";
ev.preventDefault();
}, false);
}());
谁能解释一下我需要添加什么才能让清除按钮工作并在加载后清除列表,并解释每个步骤。
谢谢
【问题讨论】:
-
demoJSON.innerHTML = "" -
看看this question 的答案。有很多建议,从设置
element.innerHTML = ""或element.textContent = ""开始。 -
另外,如果您使用模板字符串来构造 HTML,请确保转义所有内容以防止 HTML 注入。 Tagged template literals 可能是一个很好的解决方案。
-
@jirassimok 我尝试使用您给我的帖子中提供的解决方案,但它们似乎不起作用。
标签: javascript json function constants