You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅选中类内标题元素?点击事件范围异常排查

解决点击.post内h2才触发切换的问题

你的问题根源有三点:div本身绑定了内联点击事件、选择器写法错误、事件处理逻辑有误,按以下方式修正即可:

1. 移除div上的内联点击事件

原代码中每个.post div都加了onclick="updatenext()",这会导致点击div任意区域都触发操作,直接删除该属性:

<div class="post">
    <h2>Item3</h2>
</div>

<div class="post">
    <h2>Item4</h2>
</div>

2. 修正选择器,绑定h2的点击事件

原选择器$(":header.post")写法错误,:header匹配标题元素,但.post是父div的类,正确写法是选中.post下的h2元素:

$(".post h2").on("click", function() {
    // 调整后的逻辑
});

3. 调整事件处理逻辑

原代码里$(this).hide()会隐藏h2本身而非父级的.post,且用索引的方式容易出错,直接通过DOM关系操作更可靠:

var $posts = $(".post");
$posts.hide();
$posts.eq(0).show();

$(".post h2").on("click", function() {
    var $currentPost = $(this).closest(".post"); // 获取当前h2的父级.post
    var $nextPost = $currentPost.next(".post"); // 获取下一个.post

    $currentPost.hide();
    if ($nextPost.length) { // 确保存在下一个元素再显示
        $nextPost.show();
    }
});

完整可运行代码

<div class="post">
    <h2>Item3</h2>
</div>

<div class="post">
    <h2>Item4</h2>
</div>

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script>
    var $posts = $(".post");
    $posts.hide();
    $posts.eq(0).show();

    $(".post h2").on("click", function() {
        var $currentPost = $(this).closest(".post");
        var $nextPost = $currentPost.next(".post");
        
        $currentPost.hide();
        $nextPost.length && $nextPost.show();
    });
</script>

修改完成后,只有点击h2标题时才会触发隐藏当前div、显示下一个div的操作,点击div其他区域不会有任何反应。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:25:16