新手遇到一个难题,跪求高手帮忙解答。
我在网页中有一个下拉列表框seclet,一个文本框content
我想实现这样一个效果:在文本框content中输入aaaaaaaaaaa <br> bbbbbbbbbb <br> ccccccccccc内容,然后鼠标选择bbbbbbbbbb. 在列表框中选择“回复可见”后,content中的 bbbbbbbbbb就变成了标签的内容,标签的标题变成为“回复可见”。 如果在列表框中选择“版主可见”后 bbbbbbbbbb就变成了标签的内容,标签的标题变成为“版主可见”。我做这个主要目的是为了在论坛里先回复帖子了才能看到内容的效果,之前的内容是用标签隐藏掉的。我不知到该怎么实现这个效果。恳求高手们帮下。
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<title> 无标题文档 </title>
</head>
<body>
<form name= "form1 " method= "post " action= " ">
<table width= "600 " height= "162 " border= "1 ">
<tr>
<td width= "86 " height= "21 "> 选择类型: </td>
<td width= "433 "> <select name= "select ">
<option> 回复可见 </option>
<option> 版主可见 </option>
<option> 管理员可见 </option>
</select> </td>
</tr>
<tr>
<td height= "133 "> 文本域: </td>
<td> <textarea name= "content " cols= "60 " rows= "8 " id= "content "> aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccc </textarea> </td>
</tr>
</table>
</form>
aaaaaaaaaaaaaaaaaaa <br>
<FIELDSET> <LEGEND> 回复可见 </LEGEND> bbbbbbbbbbbbbbbbbbb </FIELDSET> <br>
cccccccccccccccccccccccc
</body>
</html>
[解决办法]
这样的?
--------------------------------------
<form name= "form1 " method= "post " action= " ">
<table width= "600 " height= "162 " border= "1 ">
<tr>
<td width= "86 " height= "21 "> 选择类型: </td>
<td width= "433 "> <select name= "select " onchange= "change(this.value); ">
<option value= "回复可见 "> 回复可见 </option>
<option value= "版主可见 "> 版主可见 </option>
<option value= "管理员可见 "> 管理员可见 </option>
</select> </td>
</tr>
<tr>
<td height= "133 "> 文本域: </td>
<td> <textarea name= "content " cols= "60 " rows= "8 " id= "content "> aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccc </textarea> </td>
</tr>
</table>
</form>
<script language= "javascript ">
function change(str){
var sel = document.selection.createRange();
if(sel.parentElement().name!= "content ")return;
var field = document.getElementById( "field1 ");
field.firstChild.innerText=str;
field.lastChild.nodeValue=sel.text;
}
</script>
aaaaaaaaaaaaaaaaaaa <br/>
<FIELDSET id= "field1 "> <LEGEND> 回复可见 </LEGEND> bbbbbbbbbbbbbbbbbbb </FIELDSET> <br/>
[解决办法]
这么个意思啊,效果可以实现,要是一段内容已经设成了 "回复可见 ",再修改成 "版主可见 "的话就麻烦了
-----------------------------
<form name= "form1 " method= "post " action= " ">
<table width= "600 " height= "162 " border= "1 ">
<tr>
<td width= "86 " height= "21 "> 选择类型: </td>
<td width= "433 "> <select name= "select " onchange= "change(this.value); ">
<option value= " "> </option>
<option value= "回复可见 "> 回复可见 </option>
<option value= "版主可见 "> 版主可见 </option>
<option value= "管理员可见 "> 管理员可见 </option>
</select> </td>
</tr>
<tr>
<td height= "133 "> 文本域: </td>
<td> <textarea name= "content " cols= "65 " rows= "8 " id= "content "> aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccc </textarea> </td>
</tr>
</table>
</form>
<script language= "javascript ">
var temp = " <FIELDSET> <LEGEND> $1 </LEGEND> $2 </FIELDSET> ";
function change(str){
var sel = document.selection.createRange();
if(sel.parentElement().name!= "content ")return;
sel.text=temp.replace( "$1 ",str).replace( "$2 ",sel.text);
}
</script>
[解决办法]
用js控制显示/隐藏只能骗不能的人,一查源码就都看到了,在服务器端就过滤掉才是安全的
看我下面的例子,根据用户的实际情况给flags数组的3个值分别设不同的标志,然后调用FormatContent函数返回格式化后的内容再输出就可以了,你可以改一下 那3个标志调试一下
<%
function FormatContent(flags,str)
dim reg
set reg = new RegExp
dim Arr(2)
Arr(0)= "回复可见 "
Arr(1)= "版主可见 "
Arr(2)= "管理员可见 "
for i=0 to 2
if not flags(i) then
reg.Pattern= "( <fieldset> <legend> " & Arr(i) & " </legend> ).*?( </fieldset> ) "
reg.IgnoreCase=true
str=reg.replace(str, "$1.....不让你看......$2 ")
end if
next
FormatContent=str
end function
dim flags(2)
flags(0)=true '回复标志
flags(1)=false '版主标志
flags(2)=true '管理员标志
content= "sdfadsfasdf <FIELDSET> <LEGEND> 回复可见 </LEGEND> 回复了 </FIELDSET> adsfadsf <FIELDSET> <LEGEND> 版主可见 </LEGEND> 你是版主 </FIELDSET> dadsfasdf <FIELDSET> <LEGEND> 管理员可见 </LEGEND> 你是管理员 </FIELDSET> "
content=FormatContent(flags,content)
Response.Write content
%>
[解决办法]
失误
在 set reg = new RegExp下加上
这两句
reg.IgnoreCase=true
reg.Global=true
把循环中的reg.IgnoreCase=true去掉
像这样
function FormatContent(flags,str)
dim reg
set reg = new RegExp
reg.IgnoreCase=true
reg.Global=true
dim Arr(2)
Arr(0)= "回复可见 "
Arr(1)= "版主可见 "
Arr(2)= "管理员可见 "
for i=0 to 2
if not flags(i) then
reg.Pattern= "( <fieldset> <legend> " & Arr(i) & " </legend> ).*?( </fieldset> ) "
str=reg.replace(str, "$1.....不让你看......$2 ")
end if
next
FormatContent=str
end function