自知其无知
不懂,慢慢懂。
posts - 2,comments - 2,trackbacks - 0

以前就应该知道的:
如果在 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 阅读(484) 评论(0)  编辑  收藏 所属分类: Java Web

只有注册用户登录后才能发表评论。


网站导航: