扩展 csdn 的功能
于是用 greasemonkey 给 csdn 做了一些扩展功能(包括只看楼主,高亮楼主,只看自己的回复等)
运行后页面上会多一个下拉框,如下图。
显示的是“高亮楼主”的效果
完整的 greasemonkey 脚本如下(部分脚本来源于 csdn, 已做了标注)
// ==UserScript==
// @name CSDNViewer
// @namespace HW
// @include http://topic.csdn.net/u/*
// ==/UserScript==
var cbo = null;
addComboBox();
//改变显示样式
function OnCboChange(event)
{
updateReplyItems();
var value = this.options[this.selectedIndex].value;
for (var i = 0; i < reply_items.length; i++)
{
if (!reply_items[i].replyId) continue; // 非回复
reply_items[i].table.className = "mframe"; // 去掉隐藏属性
switch (value)
{
case "v_all": // 全部显示
reply_items[i].table.style.display = "";
reply_items[i].table.style.backgroundColor = "";
break;
case "v_only_anthor": // 楼主回复
reply_items[i].table.style.display = getAnthorName().toLowerCase()== reply_items[i].username ? "" : "none";
break;
case "hl_anthor": // 高亮楼主回复
if (getAnthorName().toLowerCase() == reply_items[i].username)
reply_items[i].table.style.backgroundColor = "yellow";
break;
case "v_only_self": //只看自己的回复
reply_items[i].table.style.display = getUserName().toLowerCase()== reply_items[i].username ? "" : "none";
break;
case "hl_self": //高亮自己的回复
if (getUserName().toLowerCase() == reply_items[i].username)
reply_items[i].table.style.backgroundColor = "yellow";
break;
case "cancel_hl":
reply_items[i].table.style.backgroundColor = "";
}
}
//对楼主主帖的处理
getAnthorContent().style.backgroundColor = value =="hl_anthor"?"yellow":"";
}
//取得楼主名字
function getAnthorName()
{
var objs = document.evaluate(
"//table[@class='mframe']/tbody/tr/td/div/ul/li/dfn/a",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (objs.snapshotLength == 0)
return null;
var obj = objs.snapshotItem(0);
return obj.text;
}
//取得楼主帖子正文的 td
function getAnthorContent()
{
var objs = document.evaluate(
"//table[@class='mframe']/tbody/tr/td[@class='rw']",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (objs.snapshotLength == 0)
return null;
var obj = objs.snapshotItem(0);
return obj;
}
//取得登陆用户名
function getUserName()
{
var user = getCookie("UserName");
if (!user || (/^guest$/i).test(user))
return null;
return user;
}
//取得某个用户的下一个回复
function getNextReply(user)
{
updateReplyItems();
for (var i = 0; i < reply_items.length; i++)
{
if (!reply_items[i].replyId) continue; // 非回复
if (reply_items[i].username == user)
return reply_items[i];
}
return null;
}
//添加一个 ComBox
function addComboBox()
{
var selects = document.evaluate(
"//DIV[@class='tit']/h1/cite/select",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (selects.snapshotLength == 0)
return;
var select = selects.snapshotItem(0);
cbo = document.createElement("SELECT");
option = document.createElement("OPTION");
option.text = "全部";
option.value = "v_all";
cbo.add(option, null);
option = document.createElement("OPTION");
option.text = "只看楼主";
option.value = "v_only_anthor";
cbo.add(option, null);
option = document.createElement("OPTION");
option.text = "高亮楼主";
option.value = "hl_anthor";
cbo.add(option, null);
option = document.createElement("OPTION");
option.text = "只看自己";
option.value = "v_only_self";
cbo.add(option, null);
option = document.createElement("OPTION");
option.text = "高亮自己";
option.value = "hl_self";
cbo.add(option, null);
option = document.createElement("OPTION");
option.text = "取消高亮";
option.value = "cancel_hl";
cbo.add(option, null);
cbo.addEventListener("change", OnCboChange, false);
select.parentNode.insertBefore(cbo, select);
}
//摘自 csdn 的脚本 t5.js
function getCookie(name) {
var re = new RegExp("(\;|^)[^;]*(" + name + ")\=([^;]*)(;|$)");
var match = re.exec(document.cookie);
return match != null ? unescape(match[3]) : null;
}
//摘自 csdn 的脚本 t5.js
function updateReplyItems() {
if (!window.reply_items) {
var imgs = document.getElementsByTagName("img");
window.reply_items = [];
for (var i = 0; i < imgs.length; i++) {
var match = (/^grade\s+(\w+)$/i).exec(imgs[i].className);
if (match) {
var table = imgs[i].parentNode;
while (table && !(/^table$/i).test(table.tagName))
table = table.parentNode;
if (!table) continue;
grade = match[1];
var as = table.getElementsByTagName("a");
var username = "";
for (var j = 0; j < as.length; j++) {
match = (/^http\:\/\/hi\.csdn\.net\/(\w+)\/?$/i).exec(as[j].href);
if (match) {
username = match[1].toLowerCase();
break;
}
}
var dfns = table.getElementsByTagName("dfn");
var point = 0;
for (j = 0; j < dfns.length; j++) {
var p = /得分:(\d+)/.exec(dfns[j].innerHTML);
if (p) {
point = parseInt(p[1]);
break;
}
}
var ls = table.getElementsByTagName("li");
var honor = null;
for (j = 0; j < ls.length; j++) {
if (ls[j].getAttribute("name") == "honor") {
honor = ls[j];
break;
}
}
var tds = table.getElementsByTagName("td");
var body = null;
var replyId = "";
var isdeleted = false;
var tdReply = null;
for (j = 0; j < tds.length; j++) {
if (/^r?body/.test(tds[j].getAttribute("csdnid"))) {
body = tds[j];
var match = /(\d+)/.exec(tds[j].getAttribute("csdnid"));
if (match) replyId = match[1];
} else if (/^rmodify_/.test(tds[j].getAttribute("csdnid"))) {
isdeleted = /删除/.test(tds[j].innerHTML);
}
}
var divs = table.getElementsByTagName("div");
var recommend = null;
for (j = 0; j < divs.length; j++) {
if (divs[j].className == "rt") {
recommend = divs[j];
break;
}
}
reply_items.push({
"grade": grade
, "table": table
, "body": body
, "username": username
, "point": point
, "honor": honor
, "recommend": recommend
, "replyId": replyId
, "isdeleted": isdeleted
});
}
}
}
}
相关推荐
高校及科研院所如何利用外部数据完善技术转移转化机制.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)
内容概要:本文档围绕“【完全复现】虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比”这一主题,利用Simulink和Matlab平台,系统性地实现了虚拟同步发电机(VSG)的自适应惯量与阻尼控制策略的建模与仿真。内容涵盖VSG的核心控制原理、系统动态响应特性分析、根轨迹绘制以及在不同调节系数下的性能对比研究,旨在深入剖析关键控制参数对系统稳定性与动态性能的影响机制,为新能源并网系统中提升频率支撑能力和暂态稳定性的控制策略设计提供理论依据和技术支持。; 适合人群:具备扎实的电力系统分析与自动控制理论基础,熟练掌握Matlab/Simulink仿真工具,主要从事新能源发电、微电网运行、电力电子变换器控制或电力系统稳定研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展虚拟同步发电机(VSG)的建模与先进控制策略的深入研究;②探究自适应惯量与阻尼控制对改善电网频率响应速度和平抑功率波动的作用机理;③运用根轨迹法进行系统稳定性分析,并指导控制器参数的优化整定;④完成高水平学术论文撰写或科研项目申报所需的仿真复现实验。; 阅读建议:本资源以“完全复现”为核心目标,提供了完整的仿真模型与配套代码。使用者应在深入理解同步发电机转子运动方程、虚拟惯量及阻尼物理意义的基础上,结合电力系统暂态稳定理论,逐步操作并调试仿真模型,尤其需关注不同调节系数变化对系统动态性能指标(如超调量、调节时间)的影响,从而深化对VSG内在控制机制与稳定边界的认知。
员工满意度数据集(11列,12000 条记录)CSV 合成
详情介绍:该 HR 员工数据集含 12,000 条 ×11 列(满意度、绩效评估、项目数、月均工时、司龄、工伤、福利包、晋升、部门、薪资),无缺失值但无离职标签列,且存在数据质量问题(141 条负绩效评估、144 条负工时、49.4% 异常高工伤率、项目数仅 0/1/2),疑似经过修改或合成,不能直接做经典的员工离职预测,适合做满意度回归、薪资三分类、晋升预测或员工聚类分析,使用前必须清洗异常值并注意数据真实性限制。
科技服务机构如何通过数据服务增强市场竞争力?.docx
科技服务机构如何通过数据服务增强市场竞争力?
基于双向DC-DC变换器的储能电池SOC充电+放电双模式Simulink仿真
内容概要:本文详细介绍了一种基于双向DC-DC变换器的储能电池SOC(荷电状态)充放电双模式Simulink仿真模型,旨在实现储能系统在充电与放电两种工作模式下的智能切换与精确控制。该模型依托Simulink平台搭建,通过检测电池SOC实时值,动态判断并切换充放电模式,有效防止过充与过放,提升电池使用寿命与能量利用效率。系统涵盖双向功率变换、电压电流双闭环控制、模式切换逻辑及保护机制等关键环节,充分体现了电力电子变换与电池管理系统(BMS)的深度融合。该仿真模型适用于微电网、电动汽车及可再生能源系统中的能量管理研究,为优化储能调度策略、提高系统稳定性提供了可靠的技术支撑。; 适合人群:具备一定电力电子技术、自动控制理论及Simulink建模基础,从事新能源、储能系统、电力系统仿真等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究储能电池在不同负载或发电条件下的充放电动态行为;②优化电池管理系统中SOC估算精度与充放电控制策略;③验证双向DC-DC变换器在能量双向流动中的响应特性与控制性能;④为微电网能量调度、电动汽车能量回收、风光储一体化系统等实际应用场景提供仿真验证与设计依据。; 阅读建议:建议结合Simulink仿真环境动手实践,深入理解主电路拓扑、控制环路设计及模式切换逻辑,同时可配合相关文献资料进一步探究PI控制、滞环控制等算法对系统动态性能的影响,以全面提升对储能系统能量管理机制的认知与设计能力。


community_281
