You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用纯JavaScript对比数组元素的HTML dataset(data-id)?

纯JavaScript实现对比数组元素的data-id属性

当然可以用纯JavaScript替代jQuery的这个功能!其实jQuery的.data()方法底层也是基于原生DOM API实现的,下面给你两种实用的实现方式:

方法1:使用dataset属性(推荐)

原生DOM元素自带的dataset对象可以直接访问所有以data-开头的自定义属性,用法简洁直观:

// 假设cardArray中已经存入了两个选中的<li>元素
if (cardArray[0].dataset.id === cardArray[1].dataset.id) {
    // 两个元素的data-id相同,执行你的业务逻辑
    console.log("两张卡片的ID一致");
} else {
    console.log("两张卡片的ID不同");
}

小提示:dataset会自动处理data-后的驼峰命名(比如data-user-name对应dataset.userName),但你的属性是data-id,直接用dataset.id就可以了。

方法2:使用getAttribute()方法(兼容老浏览器)

如果需要兼容IE10及以下这类较老的浏览器,可以用getAttribute()直接获取属性值:

if (cardArray[0].getAttribute('data-id') === cardArray[1].getAttribute('data-id')) {
    // 执行对应逻辑
    console.log("两张卡片的ID一致");
}

结合你的场景的完整示例

假设你是在卡片点击时将元素存入cardArray,完整的代码示例可以参考这样:

<ul>
    <li class="card" data-id="1"><img src="images/labrys.svg" alt=""></li>
    <li class="card" data-id="2"><img src="images/laurel.svg" alt=""></li>
    <li class="card" data-id="1"><img src="images/another.svg" alt=""></li>
</ul>

<script>
let cardArray = []; // Empty Array for selected card

// 给所有卡片绑定点击事件
document.querySelectorAll('.card').forEach(card => {
    card.addEventListener('click', () => {
        // 限制数组最多存2个元素,方便对比
        if (cardArray.length < 2) {
            cardArray.push(card);
            // 当数组中有两个元素时,立即对比data-id
            if (cardArray.length === 2) {
                const isSameId = cardArray[0].dataset.id === cardArray[1].dataset.id;
                console.log(isSameId ? "ID相同,匹配成功!" : "ID不同,匹配失败");
                // 对比完成后清空数组,准备下一次选择
                cardArray = [];
            }
        }
    });
});
</script>

两种方法都能完美替代jQuery的data('id')对比逻辑,dataset更简洁现代,getAttribute()兼容性更强,根据你的项目需求选择就好~

内容的提问来源于stack exchange,提问作者Stamatis Deliyannis

火山引擎 最新活动