以前就应该知道的:
如果在 html 中写不知名的标签, html 是会忽略掉这个标签的!!
比如你建一个 html 标签,然后有以下内容:
一个解释就是,jsp 是在服务器端就进行编译解释,编译解释为响应的 html 和 class ,然后将 html 发送到客户端。
问题就出来了,如果我利用 js 在客户端进行 innerHTML ,其中 inner 的内容含有 jsp 标签,那么页面会如何处理?按照上面的解释执行,我们应该得不到我们进行标签处理的结果。
测试内容如下:
<script type="text/javascript">
window.onload = function(){
document.getElementById('div_test').innerHTML = '<c:out value="中国,强大" />';
}
</script>
<div id="div_test">
Hello world
</div>
<c:out value="你好,世界" />
你猜, div_test 的内容是什么?
对了,是 "中国,强大" - 》 为什么是这个字符串,jstl 的标签不是在服务器端处理的吗?
恩。因为从服务器发过来 html 的时候,已经将 js 的jstl标签部分转为了字串了,所以浏览器解释执行的时候就当做普通的字符串处理。
那么,利用 js(js 文件单独的通过 <script src /> 导入) 来进行 innerHTML 的 jstl 标签呢?会怎样显示?
因为这样的话,js 不会被服务器解释。
<script src="../js/test.js"></script>
<body>
<div id="div_test">
Hello world
</div>
<c:out value="你好,世界" />
</body>
而 test.js 的内容为:
window.onload = function(){
document.getElementById('div_test').innerHTML = '<c:out value="不知不觉" />';
}
结果是,层 div_test 的内容变为了空 ....
因为浏览器将不知名的标签以及其属性不进行任何的解释!,如果标签有内容,就仅仅显示标签的内容。
比如: <abcd value="哈哈" ></abcd> 就会显示为空。而 <abcd>哈哈</abcd> 就仅仅显示标签之间的内容 “哈哈”。
又由于 js 没有经过浏览器解析,直接将 jstl 标签 inner 到了 html 中,所以这个标签就还是方知道了层之间,浏览器解析时不识别,所以就挂掉了。
一个相关的问题就是: 如果我从服务器直接获取数据(利用 Ajax),然后用 js 进行数据处理,我们如果在 js 中利用 innerHTML = "jstl 标签 处理我们的数据" 的话,就挂掉了。。
如果利用 ajax 获取数据,数据的格式化,要么在服务器端格式化好,要么定义专门的 js 来格式化。
具体情况,具体分析......
一个附带的问题。
如果我引入的js 文件( <script src="test.js" /> ) 与我的页面的 js 文件定义的方法或者事件有冲突,是如何执行的?
比如:都定义有 window.onload 事件.,谁会被采纳??
我还以为都会执行呢,只是后面的方法会覆盖前面的方法中相同的处理。
但是不是的。
他只选择处理在后面定义的一个。!
也就是说,如果 <script src= '' /> 放在我页面定义的方法的后面,它就执行 <script src='' />中的方法。
归结为一点: 后面的覆盖到了前面的。
posted on 2008-12-16 17:12
CopyHoo 阅读(494)
评论(0) 编辑 收藏 所属分类:
Java Web