我正在寻找写一个关键字脚本,我需要从每个评论中提取分数,以便我可以在之后添加自己的样式。这就是我现在所拥有的:
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,但是我找不到从所有评论中得分的方法,只是从我设置的静态评论中得出。
任何帮助将不胜感激,谢谢!
答案 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";
}
由于reddit在他们的页面上有jQuery,你也可以简单地做(例如)
var $ = unsafeWindow.jQuery;
$('.tagline .score').css('background-color', 'red');