Javascript 我如何在Twitter上更改推文中的文本?
我关注的一个推特账户在不同时区的军事时间发布推特。我正在尝试使用javascript和Firefox中的GreaseMonkey插件将文本更改为适当的时区和固定时间。问题是我似乎无法让它工作 我跟踪的帐户: 我使用的脚本:Javascript 我如何在Twitter上更改推文中的文本?,javascript,twitter,replace,greasemonkey,Javascript,Twitter,Replace,Greasemonkey,我关注的一个推特账户在不同时区的军事时间发布推特。我正在尝试使用javascript和Firefox中的GreaseMonkey插件将文本更改为适当的时区和固定时间。问题是我似乎无法让它工作 我跟踪的帐户: 我使用的脚本: // ==UserScript== // @name PSO2 Emg Bot Script // @namespace Twitter // @description Convert time to EST // @include https:/
// ==UserScript==
// @name PSO2 Emg Bot Script
// @namespace Twitter
// @description Convert time to EST
// @include https://twitter.com/*
// @version 1
// ==/UserScript==
function replaceText(){
var theDiv = document.getElementsByClassName("js-tweet-text");
var theText = theDiv .innerHTML;
// Replace words
theText = theText.replace("4:00~4:30", "2:00 P.M. ~ 2:30 P.M.");
theText = theText.replace("14:00~14:30", "12:00 A.M. ~ 12:30 A.M.");
theText = theText.replace("15:00~15:30", "1:00 A.M. ~ 1:30 A.M.");
theText = theText.replace("16:00~16:30", "2:00 A.M. ~ 2:30 A.M.");
theDiv.innerHTML = theText;
}
目前它还不完整,因为我只需要在包含脚本搜索的所有时间之前让它工作。如果有人能告诉我我做错了什么以及如何改正,我将不胜感激。- 您已经定义了一个函数,
,但是 脚本中没有调用该函数的内容,因此没有 执行function replaceText()
- 请注意,div实际上将包含一个div数组,因此不能通过这种方式设置或设置它的innerHTML
- 在您提到的twitter页面中,时间由一个字符分隔,该字符不是~,而是屏幕字体无法显示的字符。使用“复制+粘贴”来正确获取该信息
- 第11行还有一个语法错误,在
theDiv.innerHTML中留下了一个空格代码>
//...
// ==/UserScript==
var $ = unsafeWindow.$;
var theDivs = $(".js-tweet-text");
theDivs.each(function(){
var theText = $(this).text();
theText = theText.replace("7:00~7:30", "7:00 P.M. ~ 7:30 P.M.");
//other replacements you want to make.
//consider using a regular expression instead of one line for each hour.
$(this).text(theText);
});
有几件事:
innerHTML
。它会破坏一切(再加上速度较慢)。使用或“DOM技术”(如下所示).replace()
语句// ==UserScript==
// @name _PSO2 Emg Bot Script
// @namespace Twitter
// @description Convert time to EST
// @include https://twitter.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements ("p.js-tweet-text", ChangeSpecialTimeStrs);
function ChangeSpecialTimeStrs (jNode) {
var node = jNode[0];
//-- Search only in the first-level text nodes of this paragraph.
for (var K = 0, numC = node.childNodes.length; K < numC; ++K) {
var childNode = node.childNodes[K];
if (childNode.nodeType === Node.TEXT_NODE) {
if (childNode.nodeValue.length > 8) {
//-- Anything shorter can't have our kind of string.
childNode.nodeValue = childNode.nodeValue.replace (
/*-- This matches strings like: "5:00~15:30"
Where "~" may be unicode FF5E
*/
/\b(\d{1,2}):(\d{2})(?:~|\uFF5E)(\d{1,2}):(\d{2})\b/gi,
shiftHourStr
);
}
}
}
}
function shiftHourStr (
matchedStr, //- Housekeeping supplied by .replace()
hour1Str, minute1Str, //- Payload vals from () groups
hour2Str, minute2Str, //- Payload vals from () groups
matchOffset, totalString //- Housekeeping supplied by .replace()
) {
//-- Return a string with a format like: "12:00 A.M. ~ 12:30 A.M."
const tzOffsetHours = 10;
var newHr1Arry = getHourOffset (hour1Str, tzOffsetHours);
var newHr2Arry = getHourOffset (hour2Str, tzOffsetHours);
var outputStr = newHr1Arry[0] //-- Hour value
+ ":" + minute1Str
+ newHr1Arry[1] //-- AM or PM
+ " ~ "
+ newHr2Arry[0] //-- Hour value
+ ":" + minute2Str
+ newHr2Arry[1] //-- AM or PM
;
return outputStr;
};
function getHourOffset (hourVal, hoursOffset) {
var amPmStr = "A.M.";
var newHourVal = parseInt (hourVal, 10) + hoursOffset;
if (newHourVal > 23) {
newHourVal -= 24;
}
if (newHourVal >= 12) {
newHourVal -= 12;
amPmStr = "P.M.";
}
if (newHourVal == 0) {
newHourVal = 12;
amPmStr = "A.M.";
}
return [newHourVal, " " + amPmStr];
}
/==UserScript==
//@name\u PSO2 Emg Bot脚本
//@namespace-Twitter
//@description将时间转换为EST
//@包括https://twitter.com/*
//@需要http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
//@需要https://gist.github.com/raw/2625891/waitForKeyElements.js
//@grant GM_addStyle
//==/UserScript==
/*-需要@grant指令来解决设计变更
在GM 1.0中引入。它会恢复沙箱。
*/
WaitForkEyements(“p.js-tweet-text”,ChangeSpecialTimesTR);
函数更改专用项TRS(jNode){
var node=jNode[0];
//--仅在本段落的第一级文本节点中搜索。
对于(var K=0,numC=node.childNodes.length;K8){
//--短一点的都不能有我们的那种线。
childNode.nodeValue=childNode.nodeValue.replace(
/*--这匹配字符串,如:“5:00~15:30”
其中“~”可以是unicode FF5E
*/
/\b(\d{1,2}):(\d{2})(?:~\uFF5E)(\d{1,2}):(\d{2})\b/gi,
移位器
);
}
}
}
}
函数移位器(
matchedStr,//-内务管理由.replace()提供
小时1STR,分钟1STR,//-来自()组的有效负载VAL
小时2STR,分钟2STR,//-来自()组的有效负载VAL
matchOffset,totalString/-内务管理由.replace()提供
) {
//--返回一个字符串,格式如下:“12:00 a.M.~12:30 a.M.”
常数Tzoffethours=10;
var newHr1Arry=gethourofset(hour1Str,tzoffethours);
var newHr2Arry=gethourofset(hour2Str,tzoffethours);
var outputStr=newHr1Arry[0]/--小时值
+“:”+分钟1STR
+新HR1警报[1]/--AM或PM
+ " ~ "
+newHr2Arry[0]/--小时值
+“:”+minute2Str
+newHr2Arry[1]/--AM或PM
;
返回outputStr;
};
函数gethourofset(hourVal、hoursfset){
var amPmStr=“A.M.”;
var newHourVal=parseInt(hourVal,10)+hourscoffset;
如果(newHourVal>23){
newHourVal-=24;
}
如果(newHourVal>=12){
newHourVal-=12;
amPmStr=“P.M.”;
}
如果(newHourVal==0){
newHourVal=12;
amPmStr=“A.M.”;
}
返回[newHourVal,“+amPmStr];
}
“军事时间”?你是说正常时间吗?你能详细说明一下这一点吗:在你提到的twitter页面中,时间由一个字符分隔,这个字符不是~,而是屏幕字体显示能力之外的东西。使用“复制+粘贴”来正确获取该信息。因为我复制并粘贴了原始脚本中的时间,这让我相信浏览器会自动转换角色。此外,您提供的脚本在greasemonkey中似乎不起作用。实际上,无需担心。我只需要重新安装脚本。非常感谢你。