分享
 
 
 

ajax中如何实现innerHTML中javascript的运行

王朝html/css/js·作者佚名  2006-08-03
窄屏简体版  字體: |||超大  

在参考前人的一些做法后,采用了一些变通方式,和添加一些额外标记,来较好的实现innerHTML中javascript的运行,从而使的页面各个模块间更

好的交互,和数据共享.

先看下面的例子:

<html>

<head>

</head>

<script>

var title = "hello";

var time = 0;

var author = "vickenyang";

var email = "ycg01@software.nju.edu.cn";

</script>

<body>

<div id="div_1">

<SPAN style="display: none">hidden</SPAN>

hehe

<!--bs-->

<script>

document.write("first");

</script>

<!--es-->

这是第一个页面!

<br>

<!--bs-->

<script>

time++;

document.write(title+time+author);

//alert(time);

document.write("<br>---------------");

</script>

<!--es-->

<input type="text" name="test" value="test">

</div>

<script>

function refreshDiv(div)

{

var html = "";

function changediv()

{

var oldwrite = document.write;

var oldwriteln = document.writeln;

document.write = function(str)

{

html += str;

}

document.writeln = function (str)

{

html += str + "\n";

}

var htmlTmp = div.innerHTML;

//ie默认大写,添加为支持firefox,美中不足,会替换所有script值,如果只是ie应用,可注销此行

htmlTmp = htmlTmp.replace(/script/gi,"SCRIPT");

//alert(htmlTmp);

var pos_1 = 0;

var pos_2 = 0;

pos_1 = htmlTmp.indexOf("<SCRIPT>",pos_1);

while(pos_1 != -1)

{

html += htmlTmp.substring(pos_2,pos_1);

var pos_3 = htmlTmp.indexOf("</SCR"+"IPT>",pos_1);

html += htmlTmp.substring(pos_1,pos_3+"<-SCRIPT>".length);

pos_2 = pos_1+"<SCRIPT>".length;

eval(htmlTmp.substring(pos_2,pos_3));

pos_2 = htmlTmp.indexOf("<!--es-->",pos_3);

pos_1 = htmlTmp.indexOf("<SCRIPT>",pos_1+1);

}

html += htmlTmp.substring(pos_2,htmlTmp.length);

document.write = oldwrite;

document.writeln = oldwriteln;

}

eval("changediv();");

div.innerHTML = html;

}

function change()

{

refreshDiv(document.getElementById('div_1'));

}

function change2()

{

document.write("over");

}

</script>

<input type="button" value="change" onclick="change();">

<input type="button" value="change2" onclick="change2();">

</body>

</html>

步骤:

1.在div的第一行加上<SPAN style="display: none">hidden</SPAN>(不这么做,ie会忽略首位的js)

2.在div中每一个js的前后加上<!--bs--><!--es-->标记.

原理:代码会告诉你的.如果你有更好的方法,请邮件联系,共同探讨.

补:

function refreshDiv(div)

{

var html = "";

如果在特殊的应用中用到递归调用,可以将此处的html 定义为全局变量,这样,保证递归刷新时候,显示的是最后一个页面.(如,你想在ajax中,异步load数据,在回调函数中指定刷新div的时候就可能用到)

下面的例子中有具体的应用:一个基于ajax的,个性网页构建雏形

http://bbs.nju.edu.cn/file/Y/ycg/obj.rar

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有