js用字首名查詢class或id節點,js模糊查詢某個dom節點

天渺工作室發表於2023-04-06

js在操作dom的場景中,有時候會有類似的場景需求。

js用字首名查詢class節點
// 引數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;
}
js用字首名查詢Id節點
// 引數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>

相關文章