V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wandero
V2EX  ›  问与答

根据关键字过滤 smzdm 条目的小脚本(另外请教一些 userscript 问题)

  •  
  •   wandero · 2015-03-09 09:55:43 +08:00 · 1954 次点击
    这是一个创建于 3344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码盲,照着 @P233 的 又一个 V2EX userscript (再次感谢) 和 w3s 的 js 教程 山寨了一个 smzdm 的过滤器

    功能

    隐藏标题或标签中包含指定关键字的条目(空格键触发)

    问题

    1. 脚本最开始用的 $(document).ready(function() 触发,但张大妈有自动翻页功能,自动加载的内容无法生效。所以之后加了空格键触发的代码,这样在用空格键滚动页面的同时会对自动加载内容生效。请问这种思路有没有更好的实现方式?
    2. 请问js里选择器有没有像 css 里的 " #div1, #div2 " 这种语法
    3. 这段代码我是在 tampermonkey 里新建的,尝试复制和导出的脚本无法再加载回 tm 里了,请问是哪里出了问题
    4. 为什么 js 代码里有的地方用 });,有的地方用 };
    5. 这段代码语法检查第一个$好像报错了,这个是怎么回事?

    不好意思,问题都比较小白,google 也没什么线索

    代码

    // ==UserScript==
    // @name       Smzdm Filter
    // @namespace  
    // @version    0.0.1
    // @description  
    // @match      http://www.smzdm.com/youhui/*
    // ==/UserScript==
    
    // 添加关键字
    var block = /关键字1|关键字2|关键字n/;
    
    
    
    $(document).ready(function(){
        $('.lrTop>span>a').each(function() {
            var tag = $(this).text();
            if (tag.search(block) >= 0) {
                $(this).parentsUntil('.leftWrap').hide();
            }
        });
        $('.itemName>a').each(function() {
            var tag = $(this).text();
            if (tag.search(block) >= 0) {
                $(this).parentsUntil('.leftWrap').hide();
            }
        });
    });
    
    
    
    $(document).keypress(function(e) {  
        if(e.which == 32) {  
            $('.lrTop>span>a').each(function() {
                var tag = $(this).text();
                if (tag.search(block) >= 0) {
                    $(this).parentsUntil('.leftWrap').hide();
                    $('.itemName>a').each(function() {
                        var tag = $(this).text();
                        if (tag.search(block) >= 0) {
                            $(this).parentsUntil('.leftWrap').hide();
                        }
                    });
                }
            });
        }  
    });
    
    第 1 条附言  ·  2015-03-09 11:18:29 +08:00
    代码好像不能粘贴的时候错了一部分($(document).keypress(function(e))……
    修改及之后的更新见 http://cloudlet.info/t/298
    5 条回复    2015-03-09 11:20:32 +08:00
    wandero
        1
    wandero  
    OP
       2015-03-09 10:02:58 +08:00
    @P233

    主贴无法@人?……
    kingwrcy
        2
    kingwrcy  
       2015-03-09 10:07:59 +08:00   ❤️ 1
    1.js的事件委托
    2.有,使用querySelector或者querySelectorAll
    3.不知道
    4.一般直接写匿名回调函数会用});,建议你看看javascript的闭包,匿名函数.
    5.看起来是没引入jquery库
    wandero
        3
    wandero  
    OP
       2015-03-09 11:09:24 +08:00
    @kingwrcy 非常感谢,好像都比较复杂的样子,要好好(慢慢)研究……
    kokdemo
        4
    kokdemo  
       2015-03-09 11:14:29 +08:00
    @wandero 插件大法好,少年快来加入写插件的队伍把
    wandero
        5
    wandero  
    OP
       2015-03-09 11:20:32 +08:00
    @kokdemo 根据自己的想法改造页面是很赞啊,(特别是东拼西凑的代码居然能生效……)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   758 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:26 · PVG 05:26 · LAX 14:26 · JFK 17:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.