我们使用了HTML的表单元素来创建一组单选按钮,每个按钮对应一个搜索引擎。然后我们添加了一个文本输入框和提交按钮,让用户可以输入搜索关键字并提交搜索请求。
在JavaScript方面,我们定义了一个submitRequest()函数,该函数从用户的选择和输入获取相关信息,并将其拼接成一个搜索链接(其中将搜索关键字进行了URL编码),最后通过调用window.location.href来打开该链接,实现搜索功能。
需要注意的是,这里使用了一个相对简单的方式在当前窗口中打开搜索结果。在实际开发中,我们可能需要使用更复杂的技术来实现预览、异步加载等功能,以提升用户体验
<html>
<head>
<title>搜索</title>
</head>
<body>
<h1>请选择您要搜索的网站:</h1>
<form>
<input type="radio" name="website" value="https://www.google.com/">Google<br>
<input type="radio" name="website" value="https://www.baidu.com/">百度<br>
<input type="radio" name="website" value="https://cn.bing.com/">必应<br>
<br>
<label for="search">请输入您要搜索的内容:</label>
<input type="text" id="search" name="search">
<button onclick="submitRequest()">提交</button>
</form>
<script>
function submitRequest() {
var website = document.querySelector('input[name="website"]:checked').value;
var search = document.getElementById("search").value;
var url = website + "search?q=" + encodeURIComponent(search);
window.location.href = url;
}
</script>
</body>
</html>
function fun(n, o) {
console.log(o);
return {
fun: function(m) {
return fun(m, n);
}
}
}
var a = fun(0);a.fun(1);a.fun(2);a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);c.fun(2);c.fun(3);
倒计时3 ~ 2 ~ 1 ~
下面公布答案:
不知道小伙伴们是不是都做对了?
小伙伴们刚拿到这道题的时候肯定是一头雾水。
这个返回值是个什么啊?
为什么函数在调用的时候就传了一个参数?
下面一一为大家解答。
我们先整理一下代码格式
function fun(n, o) {
console.log(o);
return {
fun: function(m) {
return fun(m, n);
}
}
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
我们先看这个函数,
每次在调用的时候在控制台打印一遍“o”,
然后返回一个对象
{fun:function(m){return fun(m,n)} } ,
这个对象的Key是fun,
Value是function(m){return fun(m,n)}。
那么问题来了,
在最开始调用的时候,
fun(0),只传入了一个参数,这个参数给了谁呢,
我们不妨写个小demo来看一下。
我们发现在只传入一个参数的时候,js会默认传递给第一个,第二个不会赋值。
我们先看第一行
var a = fun(0);a.fun(1);a.fun(2);a.fun(3);
var a = fun(0);
fun(0);可以写成
function fun(0, o) {
console.log(o);
return {
fun: function(m) {
return fun(m, 0);
}
}
}
会在一开始打印一遍"o",这个时候"o"是undefined。
并返回一个键值对
{fun:function(m){return fun(m,0)}}
所以这个时时候a就是这个键值对。
当调用a.fun(1);的时候,
就相当于找到a这个对象找到key值是fun的Key,传入Value值1,此时这个键值对变成
{fun: fun(1,0)}}
就相当于调用了fun(1,0)
n = 1
o = 0
这时会先执行console.log(o);
在控制台打印一个0
并返回一个键值对
{fun:function(m){return fun(m,1)}}
当调用a.fun(2);的时候
就相当于找到a这个对象找到key值是fun的Key,传入Value值2,此时这个键值对变成
{fun: fun(2,0)}}
就相当于调用了fun(1,0)
n = 2
o = 0
这时会先执行console.log(o);
在控制台打印一个0
并返回一个键值对
{fun:function(m){return fun(m,2)}}
当调用a.fun(3);的时候
就相当于找到a这个对象找到key值是fun的Key,传入Value值3,此时这个键值对变成
{fun: fun(3,0)}}
就相当于调用了fun(1,0)
n = 3
o = 0
这时会先执行console.log(o);
在控制台打印一个0
并返回一个键值对
{fun:function(m){return fun(m,3)}}
所以:
var a = fun(0);a.fun(1);a.fun(2);a.fun(3);这一行会在控制台打印出
undefined
0
0
0
接下来,
我们开始看b,
我们把b拆分,然后分别从
fun(0);
fun(0).fun(1);
fun(0).fun(1).fun(2);
fun(0).fun(1).fun(2).fun(3);
依次分析:
var b = fun(0),
先会执行console.log(o);
这个时候"o"还没有值
会打印出undefined
然后返回一个键值对
{fun:function(m){return fun(m,0)}}
这就相当于
var b = {fun:function(m){return fun(m,0)}};
var b = fun(0).fun(1),
相当于{fun:function(1){return fun(1,0)}}
fun(1,0)
这时
n = 1
o = 0
会先执行console.log(o);
在控制台打印一个0
并返回一个键值对
{fun:function(m){return fun(m,1)}}
此时
var b = {fun:function(m){return fun(m,1)}};
var b = fun(0).fun(1).fun(2),
相当于{fun:function(2){return fun(2,1)}}
fun(2,1)
这时
n = 2
o = 1
会先执行console.log(o);
在控制台打印一个1
并返回一个键值对
{fun:function(m){return fun(m,2)}}
此时
var b = {fun:function(m){return fun(m,2)}};
var b = fun(0).fun(1).fun(2).fun(3),
相当于{fun:function(3){return fun(3,2)}}
fun(3,2)
这时
n = 3
o = 2
会先执行console.log(o);
在控制台打印一个2
并返回一个键值对
{fun:function(m){return fun(m,3)}}
此时
var b = {fun:function(m){return fun(m,3)}};
所以:
var b = fun(0).fun(1).fun(2).fun(3);这一行会在控制台打印出
undefined
0
1
2
最后
我们开始看c
var c = fun(0).fun(1);
这个前面已经分析过
会在控制台分别打印
undefined
0
这时
var c = {fun:function(m){return fun(m,1)}};
c.fun(2);
相当于{fun:function(2){return fun(2,1)}}
fun(2,1)
这时
n = 2
o = 1
会先执行console.log(o);
在控制台打印一个1
并返回一个键值对
{fun:function(m){return fun(m,2)}}
c.fun(3);
相当于{fun:function(3){return fun(3,1)}}
fun(3,1)
这时
n = 3
o = 1
会先执行console.log(o);
在控制台打印一个1
并返回一个键值对
{fun:function(m){return fun(m,3)}}
所以:
var c = fun(0).fun(1);c.fun(2);c.fun(3);这一行会在控制台打印出
undefined
0
1
1
使用JavaScript实现网页搜索功能
首先,在HTML中添加有单选按钮、文本输入框和按钮的搜索表单。在单选按钮中,每个选项代表了不同的搜索内容,例如“搜索标题”、“搜索作者”、“搜索日期”等。在文本输入框中,用户可以输入关键字。代码如下:
<form id="searchForm">
<fieldset>
<legend>搜索</legend>
<label>搜索标题</label>
<input type="radio" name="type" value="title" checked>
<label>搜索作者</label>
<input type="radio" name="type" value="author">
<label>搜索日期</label>
<input type="radio" name="type" value="date">
<br>
<input type="text" name="keyword">
<button type="button" onclick="search()">搜索</button>
</fieldset>
</form>
接着,在JavaScript中定义search函数,该函数获取用户输入的搜索关键字和搜索内容,并进行数据的查询。查询的数据可以是内部数据,也可以是从后端API获取的数据。下面是一个使用内部数据的示例:
const data = [
{title: "JavaScript入门教程", author: "Alice", date: "2021-01-01"},
{title: "HTML5实战", author: "Bob", date: "2021-01-02"},
{title: "CSS3高级编程", author: "Charlie", date: "2021-01-03"},
{title: "Vue.js开发实战", author: "David", date: "2021-01-04"},
{title: "React全栈开发", author: "Edward", date: "2021-01-05"},
];
function search() {
const form = document.querySelector('#searchForm');
const type = form.elements.type.value; // 获取搜索类型
const keyword = form.elements.keyword.value; // 获取搜索关键字
// 根据搜索类型进行数据过滤
const filteredData = data.filter(item => {
if (type === 'title') {
return item.title.includes(keyword);
} else if (type === 'author') {
return item.author.includes(keyword);
} else if (type === 'date') {
return item.date.includes(keyword);
}
});
// 输出结果
console.log(filteredData);
}
上述代码首先通过querySelector方法获取搜索表单,再通过表单元素的name属性和value属性获取用户选择的搜索类型和关键字。然后通过filter方法进行数据过滤,根据选择的搜索类型和关键字对数据进行筛选。最后将筛选后的结果输出到控制台中。
如果想要将搜索结果显示在网页上,可以使用DOM操作将结果显示在指定的位置上。例如,在HTML中添加一个用于显示搜索结果的<ul>
元素:
<ul id="searchResult"></ul>
在JavaScript中修改search函数的代码,在处理完数据查询之后,将结果显示在<ul>
元素中:
function search() {
const form = document.querySelector('#searchForm');
const type = form.elements.type.value; // 获取搜索类型
const keyword = form.elements.keyword.value; // 获取搜索关键字
const ul = document.querySelector('#searchResult'); // 获取用于显示搜索结果的<ul>元素
ul.innerHTML = ''; // 首先清空搜索结果
// 根据搜索类型进行数据过滤
const filteredData = data.filter(item => {
if (type === 'title') {
return item.title.includes(keyword);
} else if (type === 'author') {
return item.author.includes(keyword);
} else if (type === 'date') {
return item.date.includes(keyword);
}
});
// 将搜索结果动态地创建为<li>元素,并添加到<ul>元素中
filteredData.forEach(item => {
const li = document.createElement('li');
li.textContent = item.title;
ul.appendChild(li);
});
}
上述代码首先获取用于显示搜索结果的<ul>
元素,并清空搜索结果。然后通过forEach方法对搜索结果进行遍历,并动态地创建每个搜索结果对应的<li>
元素。最后将创建的<li>
元素添加到<ul>
元素中。
至此,就实现了一个可以在网页上搜索数据的功能。可以根据实际需求对这个功能进行修改和扩展。其中用到了HTML、CSS、JavaScript中的相关知识点,例如表单、变量、函数、数组、DOM操作等。