【JavaScript】前端练习题(2)

本文介绍了一种用于生成CSS选择器的JavaScript函数,通过遍历DOM元素来创建精确的选择器路径,适用于网页开发中定位特定元素的需求。文章提供了两种实现方案,一种是大佬级的精炼写法,另一种是更为易懂的自写版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">

<head>
    ...
</head>

<body>
    <div id="page">
        <div class="content main">
            <div class="refer">
                <ul>
                    <li></li>
                    <li></li>
                </ul>
            </div>
        </div>
    </div>
</body>

<script>
    var genCssSelector = function () {
        // 完成这儿的代码
    }

    document.addEventListener('click', function (e) {
        //点击li时,返回:html body #page .content.main .refer ul li
        console.log(genCssSelector(e.target));
    });
</script>

</html>

大佬写的答案:

var genCssSelector = function () {
        let selectorArr = [];

        function nodeSelector(el) {
            let id = '';
            let className = '';
            let tagName = '';

            if (el.id)
                id = el.id.split(' ').map(item => '#' + item).join('');
            if (el.className)
                className = el.className.split(' ').map(item => '.' + item).join('');
            tagName = el.nodeName.toLowerCase();

            selectorArr.unshift(tagName + id + className);

            if (el.parentNode !== document)
                nodeSelector(el.parentNode);
        }

        let el = arguments[0];
        nodeSelector(el);

        return selectorArr.join(' ');
    }

自己写的答案:

var genCssSelector = function() {        
            let et = arguments[0];
            let selectArray = [];
            let resultArray = [];
            function nodeSelector(et) {
                if(et.id != '' ) {
                    selectArray.push('#'+et.id);
                } else if(et.className != '') {
                    selectArray.push('.'+et.className.replace(' ','.'));
                } else {
                    selectArray.push(et.nodeName.toLowerCase());
                }
                if(et.parentNode.id != undefined){
                    nodeSelector(et.parentNode);
                }
            }
            nodeSelector(et);
            let length = selectArray.length;
            for(let i = 0; i < length;i++)
            {
                resultArray.push(selectArray.pop());
            }
            return resultArray.join(' ');
        } 

`

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值