ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: OKJSJSF

[求助] HTML文档的计算问题

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-12 07:55 | 显示全部楼层
所以,通过对不同级别父元素的事件代理,监听个别元素或执行不同目的时可以用switch(target.id){case 'ID表达式': ...},监听同类元素执行相同目的时可以用if(target.matches('类标签')){...}。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-13 19:59 | 显示全部楼层
通讯录应该有搜索功能,下面是最简单的代码。
<body>
<input type="text" id="searchinput" placeholder="请输入关键字...">
<ul id="itemlist">
<li>姜子芽 4911229</li>
<li>王子平 4990026</li>
<li>姜是辣 1234567</li>
</ul>
</body>

<script>
document.getElementById('searchinput').addEventListener('keyup',function(e){
const searchtext=e.target.value.toLowerCase();
const items=document.getElementById('itemlist').getElementsByTagName('li');
Array.from(items).forEach(function(item){
const text=item.textContent;
const match=text.toLowerCase().indexOf(searchtext)>-1;
item.style.display=match ? '': 'none';
})
});
</script>

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-17 00:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>折叠文档搜索练习2</title>
</head>

<body>
<button type="button" id="toggl">1菜单模式</button>
<input type="text" id="searchinput" placeholder="...请输入欲搜索的姓名或电话的部份或全部..." style="width: 275px;display:none;"></input>
<ul>
<details name="only1" class="only1">
<summary>峡口支行</summary>
<li>林某 1234566</li>
<li>陆峰 222223</li>
<li>姜是辣 1234567</li>
</details>
</ul>
<ul>
<details name="only1" class="only1">
<summary>石门支行</summary>
<li>吴云 4911228</li>
<li>郑燕 4990020</li>
<ol>
<details name="only2"  class="only2">
<summary>二级标题</summary>
<li>我是谁</li>
</details>
</ol>
<li>姜是辣 1234568</li>
</details>
</ul>
</body>

<script>   
let idb=document.getElementById('toggl');
idb.addEventListener('click',myf1,false);
function myf1(){
if(idb.innerHTML=='1菜单模式'){
document.getElementById('toggl').innerHTML='2搜索模式';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('details').forEach(details=>{details.removeAttribute('name')});
document.getElementById('searchinput').style.display ='block';
}
else{
document.getElementById('toggl').innerHTML='1菜单模式';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('.only1').forEach(details=>{details.setAttribute('name','only1')});
document.querySelectorAll('.only2').forEach(details=>{details.setAttribute('name','only2')});
document.querySelectorAll('details').forEach(details=>{details.open=false});
document.getElementById('searchinput').style.display ='none';
}
}

document.getElementById('searchinput').addEventListener('keyup',myf2,false);
<!--以下代码有误,原因还未查出-->
function myf2(event){
const searchtext=event.target.value.toLowerCase();
const lielements=document.querySelectorAll('li');
lielements.forEach(lielement=>{
const litext=lielement.textContent.toLowerCase();
const boolern=litext.includes(searchtext);
let parent=lielement.parentElement;
while(parent && parent.tagName !=='DETAILS'){parent=parent.parentElement;};
if(parent){parent.open =boolern;};
}
</script>

</html>

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-17 00:08 | 显示全部楼层
本帖最后由 OKJSJSF 于 2024-10-17 20:51 编辑

前面的代码是为了给折叠展开功能的文档比如电话簿增加搜索功能。由于只能展开一个子菜单,所以使用搜索框功能时用代码删除details的name属性,可以展开所有重复的姓名或号码。用按钮控制切换启用搜索框与禁用搜索框。切换到禁用搜索框时恢复details的name属性。前面的代码搜索框监听keyup功能有误,导致切换功能无效。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-17 20:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>折叠文档搜索练习2</title>
</head>

<body>
<button type="button" id="toggl">启用输入框</button>
<input type="text" id="searchinput" placeholder="...请输入欲搜索的姓名或电话的部份或全部..." style="width: 275px;" disabled>
<ul>
<details name="only1" class="only1">
<summary>峡口支行</summary>
<li>林某 1234566</li>
<li>陆峰 222223</li>
<li>姜是辣 1234567</li>
</details>
</ul>
<ul>
<details name="only1" class="only1">
<summary>石门支行</summary>
<li>吴云 4911228</li>
<li>郑燕 4990020</li>
<ol>
<details name="only2"  class="only2">
<summary>二级标题</summary>
<li>我是谁</li>
</details>
</ol>
<li>姜是辣 1234568</li>
</details>
</ul>
</body>

<script>   
let idb=document.getElementById('toggl');
idb.addEventListener('click',myf1,false);
function myf1(){
if(idb.innerHTML=='启用输入框'){
document.getElementById('toggl').innerHTML='禁用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('details').forEach(details=>{details.removeAttribute('name')});
document.getElementById('searchinput').disabled=false;
document.getElementById('searchinput').focus();
}
else{
document.getElementById('toggl').innerHTML='启用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('.only1').forEach(details=>{details.setAttribute('name','only1')});
document.querySelectorAll('.only2').forEach(details=>{details.setAttribute('name','only2')});
document.querySelectorAll('details').forEach(details=>{details.open=false});
document.getElementById('searchinput').disabled=true;
}
}

document.getElementById('searchinput').addEventListener('keyup',myf2,false);
/*function myf2(event){
const searchtext=event.target.value.toLowerCase();
const lielements=document.querySelectorAll('li');
lielements.forEach(lielement=>{
const litext=lielement.textContent.toLowerCase();
const booler=litext.includes(searchtext);
let parent=lielement.parentElement;
while(parent && parent.tagName !=='details'){parent=parent.parentElement;};
if(parent){parent.open=booler;};
}*/
</script>

</html>

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 22:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
前面的切换功有失效总于找到原因,函数循环语句结束大括号园括号 })弄丢 。头晕眼花,这么多天才发现。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 22:28 | 显示全部楼层
百度AI助手确实好,搜索问题今天解决了,但智能助手也有错,匹配到数据后,如何展开各级父节点,智能说是从近到远的顺序展开,实际不行,要从远到近展开才行,与手工点开菜单一样的顺序。从近到远可以直接用循环语句,但从远到近不知怎么写,我只能有几级菜单写几句代码了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 22:34 | 显示全部楼层
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>折叠文档搜索练习2</title>
</head>

<body>
<button type="button" id="toggl">启用输入框</button>
<input type="text" id="search" placeholder="...请输入欲搜索的姓名或电话的部份或全部..." style="width: 275px;" disabled>
<ul>

<details name="only1" class="only1"><summary>峡口支行</summary>
<li>林某 1234566</li>
<li>陆峰 222223</li>
<li>姜是辣 1234567</li>
</details>

<details name="only1" class="only1"><summary>石门支行</summary>
<li>吴云 4911228</li>
<li>郑燕 4990020</li>
<ol>
<details name="only2"  class="only2"><summary>二级标题</summary>
<li>我是谁</li>
</details>
</ol>
<li>姜是辣 1234568</li>
</details>

</ul>
<script src="script.js"></script>
</body>

<script>   
let idb=document.getElementById('toggl');
idb.addEventListener('click',myf1,false);
function myf1(){
if(idb.innerHTML=='启用输入框'){
document.getElementById('toggl').innerHTML='禁用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('details').forEach(details=>{details.removeAttribute('name')});
document.getElementById('search').disabled=false;
document.getElementById('search').focus();
document.querySelectorAll('details').forEach(details=>{details.open=false});
}
else{
document.getElementById('toggl').innerHTML='启用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('.only1').forEach(details=>{details.setAttribute('name','only1')});
document.querySelectorAll('.only2').forEach(details=>{details.setAttribute('name','only2')});
document.querySelectorAll('details').forEach(details=>{details.open=false});
document.getElementById('search').disabled=true;
}
};

document.getElementById('search').addEventListener('keyup',myf2,false);
function myf2(){
document.querySelectorAll('details').forEach(details=>{details.open=false});
const searcht=this.value.trim().toLowerCase();
const lis=document.querySelectorAll('li');
if(searcht === ''){return;}
lis.forEach(li => {
if(li.textContent.toLowerCase().includes(searcht)){
let paren=li.closest('details');
if(paren){
paren.closest('details').open=true;
paren.open=true;
}

/*while(paren){paren.open=true;paren=paren.closest('details');}*/
}
});
}
</script>

</html>

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 22:36 | 显示全部楼层
<body>
<button type="button" id="toggl">启用输入框</button>
<input type="text" id="search" placeholder="...请输入欲搜索的姓名或电话的部份或全部..." style="width: 275px;" disabled>
<ul>

<details name="only1" class="only1"><summary>峡口支行</summary>
<li>林某 1234566</li>
<li>陆峰 222223</li>
<li>姜是辣 1234567</li>
</details>

<details name="only1" class="only1"><summary>石门支行</summary>
<li>吴云 4911228</li>
<li>郑燕 4990020</li>
<ol>
<details name="only2"  class="only2"><summary>二级标题</summary>
<li>我是谁</li>
</details>
</ol>
<li>姜是辣 1234568</li>
</details>

</ul>
<script src="script.js"></script>
</body>

<script>   
let idb=document.getElementById('toggl');
idb.addEventListener('click',myf1,false);
function myf1(){
if(idb.innerHTML=='启用输入框'){
document.getElementById('toggl').innerHTML='禁用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('details').forEach(details=>{details.removeAttribute('name')});
document.getElementById('search').disabled=false;
document.getElementById('search').focus();
document.querySelectorAll('details').forEach(details=>{details.open=false});
}
else{
document.getElementById('toggl').innerHTML='启用输入框';
idb.innerHTML=document.getElementById('toggl').innerHTML;
document.querySelectorAll('.only1').forEach(details=>{details.setAttribute('name','only1')});
document.querySelectorAll('.only2').forEach(details=>{details.setAttribute('name','only2')});
document.querySelectorAll('details').forEach(details=>{details.open=false});
document.getElementById('search').disabled=true;
}
};

document.getElementById('search').addEventListener('keyup',myf2,false);
function myf2(){
document.querySelectorAll('details').forEach(details=>{details.open=false});
const searcht=this.value.trim().toLowerCase();
const lis=document.querySelectorAll('li');
if(searcht === ''){return;}
lis.forEach(li => {
if(li.textContent.toLowerCase().includes(searcht)){
let paren=li.closest('details');
if(paren){
paren.closest('details').open=true;
paren.open=true;
}

/*while(paren){paren.open=true;paren=paren.closest('details');}*/
}
});
}
</script>

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 22:40 | 显示全部楼层
网页这个折叠展开功能太好了,以后所有word文章加上多级标题后都可以改成网页存放,分类汇总。那个民间的家族宗谱也可以从纸质改为网页,这个功能很有商用价值。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:06 , Processed in 0.039077 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表