0

我将它基于另一个脚本,因为虽然我对 javascript 有点熟悉,但我仍在学习。

// ==UserScript==
// @name           click all "load more" prompts
// @namespace      none
// @include        http://www.reddit.com/*
// ==/UserScript==

setTimeout('var deleted = 0;var links = document.getElementsByTagName("a");var i = 0;var d = 0;for (i = 0; i < links.length; i++) {var l = links[i];if (l.href) {if (l.innerHTML == "load more comments") {toggle(l);   d = 1;  } } } , 4000);

现在,问题似乎是没有一个 innerHTM 只是说“加载更多评论”。

相反,它会说“加载更多评论(x 个回复)”,其中 x 可以是任意数字。

有没有一种简单的方法来检查 innerHTML 是否包含术语“加载更多评论”而不是检查精确等价?

这是我指的带有“加载更多评论”链接的页面:http ://www.reddit.com/r/AskReddit/comments/g4c8a/whats_the_funniest_thing_you_have_heard_that_you/

编辑:

这是更新的脚本。似乎没有运行,有什么建议吗?

links = document.getElementsByTagName("a");
var i = 0;
for (i = 0; i < links.length; i++){
    var l = links[i];
    if (l.href){
        if (l.innerHTML.indexOf("load more comments") > -1) {
            toggle(l);
        }
    }
}
4

1 回答 1

0

由于这是 JavaScript 而 innerHTML 是一个字符串,因此您可以为此使用 JS 字符串方法。传统的方式是indexOf

if(l.innerHTML.indexOf("load more comments") > -1){
   // substring found
}

不太传统,您可以使用正则表达式或其他方法。

我建议仔细阅读 Mozilla 的字符串文档以了解详细信息。

编辑:看起来不错。但是,我也建议你不要按照你正在做的事情做你正在做的事情。在 JavaScript 中做任何事情而不使用诸如jQuery之类的 JS 库是非常痛苦的,即使它很简单。

setTimeout(function(){
    $('a').each(function(i){
        if(this.href && this.innerHTML.indexOf('load more comments') > -1){
            toggle(this);
        }
    });
}, 4000);

学习 jQuery,你以后会感谢自己的。

于 2011-06-22T11:48:34.633 回答