javascript - 如何让元素内容相同的执行事件效果
天蓬老师
天蓬老师 2017-04-10 18:08:17
[JavaScript讨论组]

<p class="show">1</p>
<p class="show">2</p>
<p class="show">2</p>
<p class="show">1</p>
<p class="show">1</p>
<p class="show">3</p>
我想让与this一样的内容都显示 其他隐藏
这句话应该怎么说

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
阿神
$(".show").click(function(){
    var _this=$(this);
    $(".show").each(function(){
        if($(this).text()!=_this.text()){
            $(this).hide()
        }
    })
})
伊谢尔伦
$(".show").click(function(event){
  var target = event.target;
  $(target).siblings().hide();
  $(target).show();
});

没必要再写循环,用siblings这个特性对兄弟节点操作也许会更好

ringa_lee

1楼回答正确

天蓬老师

换个思路,先把内容一样的元素放到一个对象数组里,然后点击的时候获取当前内容,最后遍历对象数组然后将对应的元素隐藏。

优点:当元素特别多的时候,不需要遍历所有的节点;
缺点:页面加载就要遍历所有的元素节点。

    let map = {},
        $show = $('.show'),
        self = this;

    $show.each(function(index, item) {
        let $this = $(this);
        let content = $this.text();

        if (!map[content]) {
            map[content] = [];
        }
        map[content].push($this)
    });

    $show.click(function() {
        let $this = $(this),
            content = $this.text();

        map[content].forEach(function(item, index, array) {
            item.hide();
        },self);
   });
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号