从Reddit,greasemonkey脚本中提取评论分数

时间:2014-06-27 18:20:49

标签: javascript jquery reddit

我正在寻找写一个关键字脚本,我需要从每个评论中提取分数,以便我可以在之后添加自己的样式。这就是我现在所拥有的:

reddit源看起来如下(每个评论都会出现)

<p class="tagline">
    <span class="score unvoted">16 points</span>

我尝试编写的javascript到目前为止,如下所示

var i, tags = document.querySelectorAll('.tagline');
for(i=0;i<tags.length;i++) {

    var pullVotes = document.getElementsByClassName('.score'); //gets an Object HTMLCollection
    var collectionPull = Array.prototype.slice.call(pullVotes); //My attempt to convert the HTMLCollection to an array
    var userVote = collectionPull[0];

    tags[i].innerHTML += "<span> ("+userVote+")</span>";
}

我得到&#34;未定义&#34;。我也知道我可以使用的reddit json,但是我找不到从所有评论中得分的方法,只是从我设置的静态评论中得出。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

首先,出了什么问题:

var pullVotes = document.getElementsByClassName('.score'); //gets an Object HTMLCollection

是的,它会返回一个HTMLCollection对象,但是你的行会查找名为“.score”的类而不是类“得分”,所以这一行会返回一个集合。

var collectionPull = Array.prototype.slice.call(pullVotes); //My attempt to convert the HTMLCollection to an array

我不确定你要在这里实现什么,因为HTMLCollection确实有item(n)方法返回...是的,索引为n的项目(如图所示) HTMLCollection class

的文档
var userVote = collectionPull[0];

好的,现在即使第一行确实有效,这也总是将集合的第一个元素分配给userVote,这意味着以下行

tags[i].innerHTML += "<span> ("+userVote+")</span>";

会为页面上的 所有 分数分配相同的值。

固定

可悲的是,我不知道你想要“(userVotes)”实际包含什么,所以我认为这不会解决你所有的问题,但这就是我能用你提供的信息做的全部:

var i, tags = document.querySelectorAll('.tagline');
for(i=0;i<tags.length;i++) {
    // get all elements with class 'score' that are inside the tagline
    var userVote = tags[i].getElementsByClassName('score').item(0);

    // do something with this element
    userVote.style="background-color: red";
}

的jQuery

由于reddit在他们的页面上有jQuery,你也可以简单地做(例如)

var $ = unsafeWindow.jQuery;
$('.tagline .score').css('background-color', 'red');