赞
踩
js在操作dom的场景中,有时候会有类似的场景需求。
// 参数dom为html dom节点 // 参数key为需模糊查询的名称字段 function queryClassNode(dom, key) { let collectArray = []; for (var i = 0; i < dom.childNodes.length; i++) { // 核心点 if (dom.childNodes[i].attributes && dom.childNodes[i].attributes["class"] && dom.childNodes[i].className.indexOf(key) !== -1) { collectArray.push(dom.childNodes[i]); } if (dom.childNodes[i].childNodes.length > 0) { let res = queryClassNode(dom.childNodes[i], key); for (var k = 0; k < res.length; k++) { collectArray.push(res[k]); } } } return collectArray; }
// 参数dom为html dom节点 // 参数key为需查询的前缀名 function queryIdNode(dom, key) { let collectArray = []; for (var i = 0; i < dom.childNodes.length; i++) { // 核心点 if (dom.childNodes[i].attributes && dom.childNodes[i].attributes["id"] && dom.childNodes[i].id.indexOf(key) !== -1) { collectArray.push(dom.childNodes[i]); } if (dom.childNodes[i].childNodes.length > 0) { let res = queryIdNode(dom.childNodes[i], key); for (var k = 0; k < res.length; k++) { collectArray.push(res[k]); } } } return collectArray; }
<html> <body> <div> <div></div> <div> <span id="test1"> 233 <span class="demo1">666</span> </span> <span id="test2"> <span id="test3">666</span> <span class="demo1">888</span> <span class="demo2">999</span> </span> </div> </div> </body> <script> ... ... ... console.log(queryIdNode(document.body, 'test')); // [span#test1, span#test2, span#test3] console.log(queryClassNode(document.body, 'demo')); // [span.demo1, span.demo1, span.demo2] </script> </html>
补充点:
确实可以直接用 querySelectorAll 吧,配合属性选择器,反而更方便。上面的js实现方法,就留着不删了
document.querySelectorAll('[id^=test]')
document.querySelectorAll('[class^=demo]')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。