大家都用过HTML 在线编辑器吧,有个问题我想问问!看能不能解决 HTML在线编辑器会自动给该图片加上http://**和域名,再保存到数据库,但如果域名变更了,图片链接就会失效,而数据库有大量数据,应该如何令图片在存入表的时候,不追加域名呢?如:<img src="/Images/my.gif" border=0> 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 "/Images/my.GIF".replace("/" ,location.hostName); <于娜> 我编程很烂~ 但至少我好看! 这是因为 通过innerHTML取到的没有好办法 只能批量替换掉了 可是有的却需要域名,有的不需要,怎么替换??我只想保持用户输入的原样。怎麽有简单的办法解决。我看 freebox 好像很不是替换的吧。 还有就是 不用localhost域名访问 而用正式域名 自己写的,帮我看看,有什么技巧解决。(如果用替换就不用给我回答了!)<iframe id='my' width='600' height='400' frameborder='1' scrolling='yes'></iframe><br><input type="button" value="design" onclick="ChangeMode('design')"> <input type="button" value="code" onclick="ChangeMode('code')"><script>var edit = document.frames["my"];edit.document.designMode="on";edit.document.open();edit.document.write("");edit.document.close();</script><script>function SetMode(m){ if(m=="design") { edit.document.body.innerHTML = edit.document.body.innerText; } if(m=="code") { edit.document.body.innerText = edit.document.body.innerHTML; }}</script> 上面贴错了,看这个自己写的,帮我看看,有什么技巧解决。(如果用替换就不用给我回答了!) <iframe id='my' width='600' height='400' frameborder='1' scrolling='yes'> </iframe> <br> <input type="button" value="design" onclick="ChangeMode('design')"> <input type="button" value="code" onclick="ChangeMode('code')"> <script> var edit = document.frames["my"]; edit.document.designMode="on"; edit.document.open(); edit.document.write(""); edit.document.close(); </script> <script> function ChangeMode(m) { if(m=="design") { edit.document.body.innerHTML = edit.document.body.innerText; } if(m=="code") { edit.document.body.innerText = edit.document.body.innerHTML; } } </script> 我大概也看了,这个问题是在与你设计状态与code状态下的一些不同在设计状态下,由于需要浏览到图片,自动把带有连接地址的都图片或者附件等等都解析成了带有URL的,即html代码因为预览需要有完整的地址才能看到,所以你在用转换到code状态时,利用 edit.document.body.innerText=edit.document.body.innerHTML;这样赋值,得到当然带有完整地址的,你得利用正则把edit.document.body.innerHTML代码里的完整地址前面的URL去掉,就是服务器地址去掉,只留路径再赋值 呵呵,我就不把答案写出来了,告诉你思路和做法,你可以先把edit.document.body.innerHTML赋给一个变量,再用正则对这个变量过滤替换就可以了!明白否? 楼上的朋友,你看看FCKeditor 、 eWebEditor怎麽处理的 ,我怎么没发现它们有正则替换啊???? eWebEditor一样也可以完整地址存在!!!FCKeditor我只是没用过,所以不清楚 // 设置编辑器的内容function setHTML(html) { ContentEdit.value = html; switch (sCurrMode){ case "CODE": eWebEditor.document.designMode="On"; eWebEditor.document.open(); eWebEditor.document.write(config.StyleEditorHeader); eWebEditor.document.body.innerText=html; eWebEditor.document.body.contentEditable="true"; eWebEditor.document.close(); bEditMode=false; break; case "EDIT": eWebEditor.document.designMode="On"; eWebEditor.document.open(); eWebEditor.document.write(config.StyleEditorHeader+html); eWebEditor.document.body.contentEditable="true"; eWebEditor.document.execCommand("2D-Position",true,true); eWebEditor.document.execCommand("MultipleSelection", true, true); eWebEditor.document.execCommand("LiveResize", true, true); eWebEditor.document.close(); doZoom(nCurrZoomSize); bEditMode=true; eWebEditor.document.onselectionchange = function () { doToolbar();} break;你好好看eWebEditor怎麽处理不是我好好看你认为他没过滤了吗?仔细看看代码!看看设计状态,就是EDIT里面的 switch(sCurrMode){ case "CODE": if (NewMode=="TEXT"){ eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText; sBody = eWebEditor_Temp_HTML.innerText; }else{ sBody = eWebEditor.document.body.innerText; } break; case "TEXT": sBody = eWebEditor.document.body.innerText; sBody = HTMLEncode(sBody); break; case "EDIT": case "VIEW": if (NewMode=="TEXT"){ sBody = eWebEditor.document.body.innerText; }else{ sBody = eWebEditor.document.body.innerHTML; } break; default: sBody = ContentEdit.value; break; } // 换图片 try{ document.all["eWebEditor_CODE"].className = "StatusBarBtnOff"; document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff"; document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff"; document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff"; document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn"; } catch(e){ } sCurrMode = NewMode; ModeEdit.value = NewMode; setHTML(sBody); disableChildren(eWebEditor_Toolbar); }}好好来看这些 // 改变模式:代码、编辑、文本、预览function setMode(NewMode){ if (NewMode!=sCurrMode){ if (!BrowserInfo.IsIE55OrMore){ if ((NewMode=="CODE") || (NewMode=="EDIT") || (NewMode=="VIEW")){ alert("HTML编辑模式需要IE5.5版本以上的支持!"); return false; } } if (NewMode=="TEXT"){ if (sCurrMode==ModeEdit.value){ if (!confirm("警告!切换到纯文本模式会丢失您所有的HTML格式,您确认切换吗?")){ return false; } } } var sBody = ""; switch(sCurrMode){ case "CODE": if (NewMode=="TEXT"){ eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText; sBody = eWebEditor_Temp_HTML.innerText; }else{ sBody = eWebEditor.document.body.innerText; } break; case "TEXT": sBody = eWebEditor.document.body.innerText; sBody = HTMLEncode(sBody); break; case "EDIT": case "VIEW": if (NewMode=="TEXT"){ sBody = eWebEditor.document.body.innerText; }else{ sBody = eWebEditor.document.body.innerHTML; } break; default: sBody = ContentEdit.value; break; } // 换图片 try{ document.all["eWebEditor_CODE"].className = "StatusBarBtnOff"; document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff"; document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff"; document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff"; document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn"; } catch(e){ } sCurrMode = NewMode; ModeEdit.value = NewMode; setHTML(sBody); disableChildren(eWebEditor_Toolbar); }}注意看这个他改变状态的函数都调用了哪些 我想FCKeditor 肯定也是有自己的过滤替换函数 代码我早就看过了。我只看到了 eWebEditor.document.body.innerHTML 好像没什么特殊处理啊。,你能告诉我吗? 汗!!!// 换图片 try{ document.all["eWebEditor_CODE"].className = "StatusBarBtnOff"; document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff"; document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff"; document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff"; document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn"; } catch(e){ } sCurrMode = NewMode; ModeEdit.value = NewMode; setHTML(sBody); disableChildren(eWebEditor_Toolbar); } 这代码if (NewMode=="TEXT"){ eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText; sBody = eWebEditor_Temp_HTML.innerText; }else{ sBody = eWebEditor.document.body.innerText; } 还有这代码!自己好好看!! // 设置编辑器的内容 function setHTML(html) { ContentEdit.value = html; switch (sCurrMode){ case "CODE": eWebEditor.document.designMode="On"; eWebEditor.document.open(); eWebEditor.document.write(config.StyleEditorHeader); eWebEditor.document.body.innerText=html; eWebEditor.document.body.contentEditable="true"; eWebEditor.document.close(); bEditMode=false; break; case "EDIT": eWebEditor.document.designMode="On"; eWebEditor.document.open(); eWebEditor.document.write(config.StyleEditorHeader+html); eWebEditor.document.body.contentEditable="true"; eWebEditor.document.execCommand("2D-Position",true,true); eWebEditor.document.execCommand("MultipleSelection", true, true); eWebEditor.document.execCommand("LiveResize", true, true); eWebEditor.document.close(); doZoom(nCurrZoomSize); bEditMode=true; eWebEditor.document.onselectionchange = function () { doToolbar();} break;自己好好看吧 if (NewMode=="TEXT"){ eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText; sBody = eWebEditor_Temp_HTML.innerText; }else{ sBody = eWebEditor.document.body.innerText; } 就单单这以句为什么不直接就用sBody = eWebEditor.document.body.innerText; 而非要用if esle 想想 还有为什么要要换图片// 换图片 try{ document.all["eWebEditor_CODE"].className = "StatusBarBtnOff"; document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff"; document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff"; document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff"; document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn"; } catch(e){ } sCurrMode = NewMode; ModeEdit.value = NewMode; setHTML(sBody); disableChildren(eWebEditor_Toolbar); } } 干吗不直接用setHTML(sBody); 这些问题难道你就不想去想下? case "CODE": if (NewMode=="TEXT"){ eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText; sBody = eWebEditor_Temp_HTML.innerText; }else{ sBody = eWebEditor.document.body.innerText; } break;重要的你还是要看这里!!!为什么在源码状态下不像你那样直接用,而是非要做下什么if else判断呢?这些你就看不出名堂??别人说你浮躁,真的确实没错!根本不安下心来看 楼上的,我现在是要把Edit模式先转换成 CODE 模式出的错,你重点让我看的不对。既然看似简单,不如你把我的代码改一下,我保证不成功,我改了不行,你试试。 // 换图片 try{ document.all["eWebEditor_CODE"].className = "StatusBarBtnOff"; document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff"; document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff"; document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff"; document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn"; } catch(e){ } 还有这个地方哦!! 汗!你的要改实在是太多了!我建议你看下eWebEditor的dialog\dialog.js这个文件,里面有相对路径转为根形式路径,相对路径按路径模式转为相应的格式,显示路径到编辑器路的相对形式好好去看看这些!不要说他没做转换!只是你没仔细找吧了,从我给你的那些重点中对应的去搜索,慢慢就找到了这个位置 你要不信,你自己做一个实验加一个安扭,安如下操作后再按安扭提交把值打印出来看就明白了:代码状态下写如下内容 <IMG src="/Images/my.GIF" border=0> 然后在切换到设计状态这时候你打印在设计状态下的值,你一切就都明白了!为什么要做那么多的函数来过滤! 求高手指点为什么事件中不响应编写的画线函数? javascript 标签内为什么用括号呢?谁能给初学者解答一下 如何用js运行inf和reg文件 大家帮帮忙: javescript中调用activeX 出现错误 . 谢谢。 下面的代码怎么实现动态显示时间 用javascript获取当前鼠标所在单元格的内容和位置 JS焦点图片代码改写!!! javascript 如何判断字符类型,要判断的类型如下: 一个常见问题,请教解决办法? 求解,在javascript中是否存在全局变量和局部变量的问题; firefox下的问题,在线等。 求动态增加上传文件框数量的javascript
<iframe id='my' width='600' height='400' frameborder='1' scrolling='yes'></iframe><br>
<input type="button" value="design" onclick="ChangeMode('design')"> <input type="button" value="code" onclick="ChangeMode('code')">
<script>
var edit = document.frames["my"];
edit.document.designMode="on";
edit.document.open();
edit.document.write("");
edit.document.close();
</script>
<script>
function SetMode(m)
{
if(m=="design")
{
edit.document.body.innerHTML = edit.document.body.innerText;
} if(m=="code")
{
edit.document.body.innerText = edit.document.body.innerHTML;
}
}
</script>
自己写的,帮我看看,有什么技巧解决。(如果用替换就不用给我回答了!)
<iframe id='my' width='600' height='400' frameborder='1' scrolling='yes'> </iframe> <br>
<input type="button" value="design" onclick="ChangeMode('design')"> <input type="button" value="code" onclick="ChangeMode('code')">
<script>
var edit = document.frames["my"];
edit.document.designMode="on";
edit.document.open();
edit.document.write("");
edit.document.close();
</script>
<script>
function ChangeMode(m)
{
if(m=="design")
{
edit.document.body.innerHTML = edit.document.body.innerText;
} if(m=="code")
{
edit.document.body.innerText = edit.document.body.innerHTML;
}
}
</script>
在设计状态下,由于需要浏览到图片,自动把带有连接地址的都图片或者附件等等都解析成了带有URL的,
即html代码
因为预览需要有完整的地址才能看到,所以你在用转换到code状态时,利用 edit.document.body.innerText=edit.document.body.innerHTML;这样赋值,得到当然带有完整地址的,你得利用正则把edit.document.body.innerHTML代码里的完整地址前面的URL去掉,就是服务器地址去掉,只留路径再赋值
再用正则对这个变量过滤替换就可以了!明白否?
一样也可以完整地址存在!!!
FCKeditor
我只是没用过,所以不清楚
function setHTML(html) {
ContentEdit.value = html;
switch (sCurrMode){
case "CODE":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(config.StyleEditorHeader);
eWebEditor.document.body.innerText=html;
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.close();
bEditMode=false;
break;
case "EDIT":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(config.StyleEditorHeader+html);
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.execCommand("2D-Position",true,true);
eWebEditor.document.execCommand("MultipleSelection", true, true);
eWebEditor.document.execCommand("LiveResize", true, true);
eWebEditor.document.close();
doZoom(nCurrZoomSize);
bEditMode=true;
eWebEditor.document.onselectionchange = function () { doToolbar();}
break;
你好好看eWebEditor怎麽处理
不是我好好看
你认为他没过滤了吗?
仔细看看代码!
看看设计状态,就是EDIT里面的
case "CODE":
if (NewMode=="TEXT"){
eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
sBody = eWebEditor_Temp_HTML.innerText;
}else{
sBody = eWebEditor.document.body.innerText;
}
break;
case "TEXT":
sBody = eWebEditor.document.body.innerText;
sBody = HTMLEncode(sBody);
break;
case "EDIT":
case "VIEW":
if (NewMode=="TEXT"){
sBody = eWebEditor.document.body.innerText;
}else{
sBody = eWebEditor.document.body.innerHTML;
}
break;
default:
sBody = ContentEdit.value;
break;
} // 换图片
try{
document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
}
catch(e){
}
sCurrMode = NewMode;
ModeEdit.value = NewMode;
setHTML(sBody);
disableChildren(eWebEditor_Toolbar); }
}好好来看这些
function setMode(NewMode){
if (NewMode!=sCurrMode){
if (!BrowserInfo.IsIE55OrMore){
if ((NewMode=="CODE") || (NewMode=="EDIT") || (NewMode=="VIEW")){
alert("HTML编辑模式需要IE5.5版本以上的支持!");
return false;
}
} if (NewMode=="TEXT"){
if (sCurrMode==ModeEdit.value){
if (!confirm("警告!切换到纯文本模式会丢失您所有的HTML格式,您确认切换吗?")){
return false;
}
}
} var sBody = "";
switch(sCurrMode){
case "CODE":
if (NewMode=="TEXT"){
eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
sBody = eWebEditor_Temp_HTML.innerText;
}else{
sBody = eWebEditor.document.body.innerText;
}
break;
case "TEXT":
sBody = eWebEditor.document.body.innerText;
sBody = HTMLEncode(sBody);
break;
case "EDIT":
case "VIEW":
if (NewMode=="TEXT"){
sBody = eWebEditor.document.body.innerText;
}else{
sBody = eWebEditor.document.body.innerHTML;
}
break;
default:
sBody = ContentEdit.value;
break;
} // 换图片
try{
document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
}
catch(e){
}
sCurrMode = NewMode;
ModeEdit.value = NewMode;
setHTML(sBody);
disableChildren(eWebEditor_Toolbar); }
}注意看这个他改变状态的函数都调用了哪些
// 换图片
try{
document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
}
catch(e){
} sCurrMode = NewMode;
ModeEdit.value = NewMode;
setHTML(sBody);
disableChildren(eWebEditor_Toolbar); } 这代码
if (NewMode=="TEXT"){
eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
sBody = eWebEditor_Temp_HTML.innerText;
}else{
sBody = eWebEditor.document.body.innerText;
}
还有这代码!自己好好看!!
function setHTML(html) {
ContentEdit.value = html;
switch (sCurrMode){
case "CODE":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(config.StyleEditorHeader);
eWebEditor.document.body.innerText=html;
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.close();
bEditMode=false;
break;
case "EDIT":
eWebEditor.document.designMode="On";
eWebEditor.document.open();
eWebEditor.document.write(config.StyleEditorHeader+html);
eWebEditor.document.body.contentEditable="true";
eWebEditor.document.execCommand("2D-Position",true,true);
eWebEditor.document.execCommand("MultipleSelection", true, true);
eWebEditor.document.execCommand("LiveResize", true, true);
eWebEditor.document.close();
doZoom(nCurrZoomSize);
bEditMode=true;
eWebEditor.document.onselectionchange = function () { doToolbar();}
break;自己好好看吧
eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
sBody = eWebEditor_Temp_HTML.innerText;
}else{
sBody = eWebEditor.document.body.innerText;
} 就单单这以句
为什么不直接就用sBody = eWebEditor.document.body.innerText;
而非要用if esle 想想
// 换图片
try{
document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
}
catch(e){
} sCurrMode = NewMode;
ModeEdit.value = NewMode;
setHTML(sBody);
disableChildren(eWebEditor_Toolbar); }
} 干吗不直接用setHTML(sBody);
这些问题难道你就不想去想下?
if (NewMode=="TEXT"){
eWebEditor_Temp_HTML.innerHTML = eWebEditor.document.body.innerText;
sBody = eWebEditor_Temp_HTML.innerText;
}else{
sBody = eWebEditor.document.body.innerText;
}
break;
重要的你还是要看这里!!!
为什么在源码状态下不像你那样直接用,而是非要做下什么if else判断呢?
这些你就看不出名堂??
别人说你浮躁,真的确实没错!根本不安下心来看
try{
document.all["eWebEditor_CODE"].className = "StatusBarBtnOff";
document.all["eWebEditor_EDIT"].className = "StatusBarBtnOff";
document.all["eWebEditor_TEXT"].className = "StatusBarBtnOff";
document.all["eWebEditor_VIEW"].className = "StatusBarBtnOff";
document.all["eWebEditor_"+NewMode].className = "StatusBarBtnOn";
}
catch(e){
} 还有这个地方哦!!
这个文件,里面有相对路径转为根形式路径,相对路径按路径模式转为相应的格式,显示路径到编辑器路的相对形式
好好去看看这些!
不要说他没做转换!只是你没仔细找吧了,从我给你的那些重点中对应的去搜索,慢慢就找到了这个位置
加一个安扭,安如下操作后再按安扭提交把值打印出来看就明白了:
代码状态下写如下内容
<IMG src="/Images/my.GIF" border=0>
然后在切换到设计状态
这时候你打印在设计状态下的值,你一切就都明白了!为什么要做那么多的函数来过滤!