求助用 JS 进行替换的一个问题

digidea 2008-08-28 10:42:46
我所使用的 Blogbus, 在 Blog 的按月份存档功能上, 会自动生成如下代码.

<ul>
<li><a href='/archives/1059689.html'>2007/04/01 - 2007/04/30</a></li>
<li><a href='/archives/1056377.html'>2007/05/01 - 2007/05/31</a></li>
<li><a href='/archives/1059688.html'>2007/06/01 - 2007/06/30</a></li>
<li><a href='/archives/1065036.html'>2007/07/01 - 2007/07/31</a></li>
<li><a href='/archives/1074669.html'>2007/08/01 - 2007/08/31</a></li>
<li><a href='/archives/1082390.html'>2007/09/01 - 2007/09/30</a></li>
</ul>


我不太喜欢这种显示方式, 但是没办法改.
请问, 有没有批量将它们替换为下面这种显示方式的办法.

April 2007
May 2007
June 2007
July 2007
...

用 JS 如果逐条进行替换貌似是可以的吧, 但是那样太麻烦了.
哪位高手能帮忙写一个完美的替换代码出来?
十分感谢.
...全文
141 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd5816690 2008-08-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 digidea 的回复:]
哈, return newMonth + " " + this.getFullYear(); 这样就好了...
[/Quote]
原来如此,又学到一招
digidea 2008-08-29
  • 打赏
  • 举报
回复
哈, return newMonth + " " + this.getFullYear(); 这样就好了...
digidea 2008-08-29
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20021007/12/1075965.html
原来有个 1900 的问题...
cgisir 2008-08-29
  • 打赏
  • 举报
回复
<ul>
<li><a href='/archives/1059689.html'>2007/04/01 - 2007/04/30</a></li>
<li><a href='/archives/1056377.html'>2007/05/01 - 2007/05/31</a></li>
<li><a href='/archives/1059688.html'>2007/06/01 - 2007/06/30</a></li>
<li><a href='/archives/1065036.html'>2007/07/01 - 2007/07/31</a></li>
<li><a href='/archives/1074669.html'>2007/08/01 - 2007/08/31</a></li>
<li><a href='/archives/1082390.html'>2007/09/01 - 2007/09/30</a></li>
</ul>
<script>
var m = ['Janu', 'Febr', 'March','Apri','Mary','June','July','Augu','Sept','October','Nove','Dece'];
var ul = document.getElementsByTagName('ul')[0];
var reg = /(\d+)\/(\d+)\/\d+\s*\-\s*(\d+)\/(\d+)\/\d+(?=<\/a>)/gi;
var str = ul.innerHTML.replace(reg,'$2 $1 - $4 $3');
str = str.replace(/\d{1,2}(?=\D\d{4})/g, function(n){return m[parseInt(n)];})
ul.innerHTML = str;
</script>
sxn19811006 2008-08-29
  • 打赏
  • 举报
回复
学习
digidea 2008-08-29
  • 打赏
  • 举报
回复
哈, 楼上的方法也不错.
lojinmei 2008-08-29
  • 打赏
  • 举报
回复
用JS的a.innerText属性可以做到,再加上个自定义循环就OK了.
orz_ORZ_orz 2008-08-29
  • 打赏
  • 举报
回复
学习
digidea 2008-08-28
  • 打赏
  • 举报
回复
不会吧, 没听说过? 晕...
sd5816690 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 digidea 的回复:]
额... 还有一个 Bug.
在 Safari 里面, 输出结果中的 2007 变成 107 了 - -.

April 107 - April 107
[/Quote]
难道 Safari 里的 getYear() 返回的是 107 ??
在这之前,我没有听说过 Safari ...............
sd5816690 2008-08-28
  • 打赏
  • 举报
回复
1、可以指定位置
但是必须符合 “yyyy/MM/dd - yyyy/MM/dd”格式

上面的代码中是将所有的 <li> 标签里的日期替换


2、如果不加 onload="init()"
那可以在 <script>.......</script> 的最后面加一句
document.onload=init;
digidea 2008-08-28
  • 打赏
  • 举报
回复
额... 还有一个 Bug.
在 Safari 里面, 输出结果中的 2007 变成 107 了 - -.

April 107 - April 107
digidea 2008-08-28
  • 打赏
  • 举报
回复
对了, 上面这段代码可不可以指定一下, 让它只替换某个地方的文本, 其他地方不会影响.
另外如果不在 body 中加入 onload="init()" 可以吗?
再次感谢!
sd5816690 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 digidea 的回复:]
十分感谢! IE8 B2 里可以.
同时期待如果有更好的方法.
[/Quote]
[Quote=引用 6 楼 digidea 的回复:]
恩, 用 IETester 和 Opera, Safari 试了一下都可以.
[/Quote]
呵呵,那就好
digidea 2008-08-28
  • 打赏
  • 举报
回复
恩, 用 IETester 和 Opera, Safari 试了一下都可以.
digidea 2008-08-28
  • 打赏
  • 举报
回复
十分感谢! IE8 B2 里可以.
同时期待如果有更好的方法.
sd5816690 2008-08-28
  • 打赏
  • 举报
回复
上面的方法支持 IE6 和 FF,没试过 IE7
sd5816690 2008-08-28
  • 打赏
  • 举报
回复
不知道有没有直接将时间格式化输出的方法,我自己写了一个

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<title>test</title>
</head>

<script>
Date.prototype.format = function(){
var newMonth = null;
switch(this.getMonth()){
case 0:newMonth = "January";break;
case 1:newMonth = "February";break;
case 2:newMonth = "March";break;
case 3:newMonth = "April";break;
case 4:newMonth = "May";break;
case 5:newMonth = "June";break;
case 6:newMonth = "July";break;
case 7:newMonth = "August";break;
case 8:newMonth = "September";break;
case 9:newMonth = "October";break;
case 10:newMonth = "November";break;
case 11:newMonth = "December";break;
}
return newMonth + " " + this.getYear();
}

function init(){
var array = document.getElementsByTagName("li");
var reg = /(\d{4}\/\d{2}\/\d{2}) - (\d{4}\/\d{2}\/\d{2})/;
for(var i = 0;(e = array[i]); i++){
var matcher = reg.exec(e.innerHTML);
var fDate = new Date(matcher[1]);
var lDate = new Date(matcher[2]);
e.innerHTML = e.innerHTML.replace(reg,fDate.format() + " - " + lDate.format())
}
}
</script>

<body onload="init()">
<ul>
<li><a href='/archives/1059689.html'>2007/04/01 - 2007/04/30</a></li>
<li><a href='/archives/1056377.html'>2007/05/01 - 2007/05/31</a></li>
<li><a href='/archives/1059688.html'>2007/06/01 - 2007/06/30</a></li>
<li><a href='/archives/1065036.html'>2007/07/01 - 2007/07/31</a></li>
<li><a href='/archives/1074669.html'>2007/08/01 - 2007/08/31</a></li>
<li><a href='/archives/1082390.html'>2007/09/01 - 2007/09/30</a></li>
</ul>
</body>

</html>

digidea 2008-08-28
  • 打赏
  • 举报
回复
楼上的朋友能帮忙写出代码么? 我对 JS 实在是很不懂... 谢谢.
lenovo836 2008-08-28
  • 打赏
  • 举报
回复
用JS的a.innerText属性可以做到,再加上个自定义循环就OK了.

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧